vb串口接收16位数据,有个例子程序看不明白。

来源:百度知道 编辑:UC知道 时间:2024/05/29 02:50:00
有个例子程序看不明白,就是下位机发送的是每两个8位数据代表一个16位的整形数,低位字节在前,高位在后。将传过来的16进制数据(两个字节)转换为10进制数据,书上给了程序,下面是其中的一段。
转换10进制的时候,我在网上查的说是要,将16进制数据从右到左两个一组,重新排序,我想Mid(buffer, 3, 2) & Mid(buffer, 1, 2))就是这个意思吧,但是我不明白上面两句,尤其是If Len(Trim(Mid(buffer, 1, 2))) = 1 这个条件语句是指的什么情况呢?

Private Sub MSComm1_OnComm()
Dim Inbyte() As Byte '定义数组
Dim buffer As String
Select Case MSComm1.CommEvent '根据事件进行分支
Case comEvReceive '如果是接收事件
Inbyte = MSComm1.Input '获取传送过来的数据到inByte数组中
For i = LBound(Inbyte) To UBound(Inbyte) '循环这个数组,用于在下面的语句中读取
buffer = buffer + Hex(Inbyte(i)) + Chr(32)
Next i
Case comEvSend
End Select
'获取十进制测量数据
If Len(Trim(Mid(buffer, 1, 2))) = 1 Then ’这句话代表什么意思??
datatemp(num) = Val("&H" & Mid(buffer, 3, 2) & Str("0") & Mid(buffer, 1, 2))
Else
datatemp(num) = Val("&H

buffer = buffer + Hex(Inbyte(i)) + Chr(32) , 这个chr(32)就是个空格。
当Hex(Inbyte(i)) 为 0-F时,buffer前两字节是 数加空格。

Len(Trim(Mid(buffer, 1, 2))) = 1 这个条件,trim是去掉空格。所以是判断是否是0-F

其实不用这么麻烦。
datatemp(num)= clng(inbyte(2)) * 256 + inbyte(1) 即可。

如果 buffer 只有一个字节,前面加个 0 ,再加到 datatemp(num) 中