vb 如何把串口通信接收到的byte转换成数值
发布网友
发布时间:2022-04-19 15:15
我来回答
共4个回答
热心网友
时间:2023-08-28 13:38
淡定!IT界的先生们...
我理解您的问题是:想把接收到的二进制数转换为数值型(整数或小数)... 所以我认为在处理接收到的字节型数据时应该如下:
1、要知道接收到的字节数据,在什么位置分段。也就是说,当对方在不断的发数据时候,整个发送数据流是连续不断的,要明确所发数据流的结构。
如:
"S0025N567" 这样的字符串发送过来,双方已经约定好了,见到"S"表示序号,后面的四位数据就是序号的值,见到"N"就是表示其测量的数值。这样就好办了,在接收数据的时候,虽然收到的是一串二进制数,但通过其约定的特殊字符就能拆分需要的数据了。
2、明确了双方的数据结构,在数据处理中就是处理方法的问题,应该没什么难处理的了。
(1)、16进制的字节转换成整数
Val(&Hxx) xx 表示16进制的字符型数据
所以你的 tmp = a(0) 出现错误正常.
这样写就正确了: tmp=val(chr(a(0))
如果a()表示的整个数字,应该写成:
tmp=Val(chr(a(0))+chr(a(1))+chr(a(3))+chr(a(4))+...)
这里需要你用 UBound(a) 来判断a() 的长度,确定到底加到那里,这里面已经包括出现小数的情况 .
(2)、 在利用OnComm事件进行接收数据时,注意保存中间数据。
虽然你的RThreshold参数设为1,由于电脑缓存及多任务的原因,接收的字符会出现不连续的可能,如:当前的OnComm() 事件中接收的是“S0025N5”,在下一个OnComm事件接收到的是"67",这些需要在程序中做处理.
希望我的思路能帮到你。有问题可以继续讨论...
热心网友
时间:2023-08-28 13:39
晕死了~ 收到的不就是一串Byte嘛,全都是0-255的数值。不用转。
你是不是自己想迷糊了?不管是几进制,1就是1,2就是2。
有两个苹果,10进制是2个,2进制是10个,但它不就是俩苹果嘛!
虽然表示方法不同,“一共俩苹果”是不变的。
同样一个Byte的2和一个Integer的2也是一样的, 没有任何区别。
热心网友
时间:2023-08-28 13:39
Private Sub MSComm1_OnComm()
Dim dd() As Byte, i%
Dim iTime As Double
Select Case MSComm1.CommEvent
Case comEvReceive ' 收到 RThreshold # ofchars.
i% = MSComm1.InBufferCount
ReDim dd(i% + 1)
dd = MSComm1.Input
Call RecvBufAdd(dd, i%) '处理接收串口数据
end select
热心网友
时间:2023-08-28 13:40
串口是什么,端口吗