关于vb负数转换2字节问题
我看了of123的程序:
dim Num as INTEGER
dim Buffer(0 to 1) as BYTE
dim strNum as string
(1).负数如何转换成2个字节
strNum = Right("000" & Hex(-80), 4)
Buffer(0) = Val("&H" & Left(strNum, 2))
Buffer(1) = Val("&H" & Right(strNum, 2))
(2).2个字节合成一个整数
Num = Val("&H" & Right("0" & Hex(Buffer(0)), 2) & Right("0" & Hex(Buffer(1)), 2))
这个程序能用,可我不明白道理,请老师指点,
[解决办法]
还要保证数据中不能出现 02 和 03。
你这个协议有点问题。最好的 02 之后附加一个长度域(需要几个字节要根据你可能的最长数据块来确定)。这样接收端就知道长度,不必根据接收到的信息的值来判断是否包头和包尾。
还有一种方法,是将你所有的传输数据改成 ASCII 码(数据长度要增加一倍)。
例如,你要发送数据 0x02, 0x03,就要将这 4 个半字节看作字符,转换成 0x30, 0x32, 0x30, 0x33 来发送。这样就可以保证你的数据中不会有 02, 03 这样的数据。当然,恢复数据时要逆向转码。