野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8139|回复: 12

在写串口助手的时候遇到问题,请大家帮忙看下问题

[复制链接]
发表于 2017-11-4 16:12:06 | 显示全部楼层 |阅读模式
if (isHex==true)
            {
                string[] str = new string[3];
                Single[] value = new Single[3];
                ArrayList array = new ArrayList();

                while (true)
                {
                    int bufferlen = sp.BytesToRead;

                    if (bufferlen <= 0)
                        break;

                    byte[] bytes = new byte[bufferlen];
                    sp.Read(bytes, 0, bufferlen);

                    array.Add(bytes);
                    sp.DiscardInBuffer();
                }     
                byte[] newbyte =new byte[array.Count];
                newbyte = (byte[])array.ToArray(typeof(byte));

我想把串口缓冲区的数据分多次取出,然后放到一个数组里面,但是实现不了想要的效果,求解!!!


回复

使用道具 举报

 楼主| 发表于 2017-11-4 16:25:03 | 显示全部楼层
@十一月的萧邦 版主帮忙看看,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-4 16:42:52 | 显示全部楼层
@fire 求助火哥
回复 支持 反对

使用道具 举报

发表于 2017-11-4 16:52:30 | 显示全部楼层
不记得C#怎么用了,帮顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-4 16:57:09 | 显示全部楼层
flyleaf 发表于 2017-11-4 16:52
不记得C#怎么用了,帮顶

谢谢帮顶!
回复 支持 反对

使用道具 举报

发表于 2017-11-4 17:08:05 | 显示全部楼层
每次在触发接收事件后,直接将数据读出即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-4 17:24:25 | 显示全部楼层
十一月的萧邦 发表于 2017-11-4 17:08
每次在触发接收事件后,直接将数据读出即可。

你说的意思我明白。下面是我写的上一个串口软件
if (isHex==true)
            {
                string str;
                uint i=0;
                int bufferlen = sp.BytesToRead;
                byte[] bytes = new byte[bufferlen];
                sp.Read(bytes, 0, bufferlen);
                for(i=0;i<bytes.Length;i++)
                {
                    str= Convert.ToString((byte)bytes, 16).ToUpper();
                    tbxRecvData.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");
                 }
            }   
但是我像现在需要把下位机每次传送过来的数据接收完毕后,然后操作接收的数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-4 17:25:56 | 显示全部楼层
你的意思应该就是我代码里的处理方式吧!接收几个字节,然后显示出来!@十一月的萧邦
回复 支持 反对

使用道具 举报

发表于 2017-11-4 19:45:39 | 显示全部楼层
参考我的代码
  1.         /// <summary>
  2.         /// 字节数组转为十六进制字符串
  3.         /// </summary>
  4.         /// <param name="data"></param>
  5.         /// <param name="intervalChar"></param>
  6.         /// <returns></returns>
  7.         public static string HexByteArrayToString(byte[] data, char intervalChar=' ')
  8.         {
  9.             try
  10.             {
  11.                 StringBuilder sb = new StringBuilder(data.Length * 3);
  12.                 foreach (byte b in data)
  13.                 {
  14.                     sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, intervalChar));
  15.                 }
  16.                 return sb.ToString().ToUpper();//将得到的字符全部以字母大写形式输出
  17.             }
  18.             catch
  19.             {
  20.                 return "";
  21.             }
  22.         }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-6 09:04:41 | 显示全部楼层

   很感谢版主的耐心讲解,但版主的代码好像解决不了我的问题。卡了两天了,我把问题详细描述下,请版主再指导一下!
   我现在需要接收下位机发来的22个字节,如下:0x53 0x50 0x02 0x01 0x0F 0x89 0x07 0x42 0x24 0xFF 0x79 0x3F 0x9F 0xD9 0x28 0x3C 0x11 0x06 0x17 0x08 0x48 0x21,我想把5~16个字节,转化为三个浮点数然后通过DataGridView控件显示出来,现在浮点数转化已经实现,主要卡到下位机字节的接收上!!
    例如:我按下单片机上的“确定键”后,DataGridView控件把数据显示出来,反复如此!我现在只能显示一次数据,再按“确定键”,就无法显示数据;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-6 11:02:45 | 显示全部楼层
慢慢爱上M3 发表于 2017-11-6 09:04
很感谢版主的耐心讲解,但版主的代码好像解决不了我的问题。卡了两天了,我把问题详细描述下,请版主 ...

多谢版主的代码,字节接收问题解决了,现在还有个问题!按照版主的代码,结果是一个字符串,有没有啥方法可以按要求把字符串转化为多个浮点数显示出来???
回复 支持 反对

使用道具 举报

发表于 2017-11-6 20:47:54 | 显示全部楼层
慢慢爱上M3 发表于 2017-11-6 11:02
多谢版主的代码,字节接收问题解决了,现在还有个问题!按照版主的代码,结果是一个字符串,有没有啥方法 ...

那你就转浮点数好了呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-7 08:36:44 | 显示全部楼层
十一月的萧邦 发表于 2017-11-6 20:47
那你就转浮点数好了呀

好的,多谢版主!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 05:54 , Processed in 0.039715 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表