C#读取串口通信数据中怎么把数据长度取出来

meidaolia 2009-07-07 11:41:25
各位大哥帮帮忙:
我把下几位返回的数据存储在一个字节数组 mbuffer中,格式是: AB 02 C1 CD, 其中AB为开始标志,CD为结束标志,02为数据包长度,C1为数据包内容。
我现在要获取数据包的长度,也就是02这个数据。获取这个长度后我实例化一个(长度 - 1)大小的字节数组去读取数据包的内容,也就是读取CD。
我用int aTemp = Convert.ToInt32(mBuffer[ReadIndex + 1]); 这个为什么有时候aTemp返回是0?我在监视窗口中看到Convert.ToInt32(mBuffer[ReadIndex + 1])的值是2,为什么赋值给aTemp的时候就变成0了,而且是随机的发生这种情况,大多书情况下aTemp 是等于2的。
说明:ReadIndex是读缓冲区的指针,此时ReadIndex正好是AB在mBuffer中的索引,所以用ReadIndex + 1作为好读取 02 的索引,不过读取的值在转换的时候有时候正确,有时候错误...
哪位哥哥指点一、二?
...全文
554 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgke 2009-07-07
  • 打赏
  • 举报
回复
直接
int aTemp =mBuffer[ReadIndex + 1];

如果还是为0 增加个延时把.
meidaolia 2009-07-07
  • 打赏
  • 举报
回复
ReadIndex不会总是0,它是AB在缓冲区中的索引,有可能是任何值(0——255),我定义了256的大小。
我是一个字节一个字节读取缓冲区中的内容的,比如:缓冲区中的数据是 00 23 93 AB 02 C1 CD CC AB 02 C4 CD 83 AD ...,我每个字节都读取,如果当前读取的字节不是AA,则不做任何处理,继续读取下一个字节,如果当前字节内容是AA(此时ReadIndex就是AA的下标),然后取出AA的下一个字节内容(此时该字节在缓冲区mBuffer中的下标就是ReadIndex +1)...就是取这个字节内容的时候明明知道是02(上面的举例数据),可就是用 int aTemp = Convet.ToInt32(mBuffer[ReadIndex + 1]); 取的时候Convert.ToInt32(mBuffer[ReadIndex + 1])的值在监视窗口中是2,但"="左边的aTemp = 0;
很奇怪啊...这中情况发生的概率比大概10%左右...其他90%的情况下是正确的...

难道会在单步调试的时候出现aTemp =0 而 Convert.ToInt32(mBuffer[ReadIndex + 1])=2 ?
就出现这种诡异的问题了...
wdgphc 2009-07-07
  • 打赏
  • 举报
回复
首先,不知道你是不是每次都读到CD后,才进入你的函数来处理,如果刚读到AB就处理有可能会出错。
其实,你看看每次执行int aTemp = Convert.ToInt32(mBuffer[ReadIndex + 1]); 时ReadIndex 是不是=0?
难道会在单步调试的时候出现aTemp =0 而 Convert.ToInt32(mBuffer[ReadIndex + 1])=2 ?

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧