关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误。用其
关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个00,末尾数据错误。用其他串口软件调试没问题,问题在哪?为什么会多出数据00?...
关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误。用其他串口软件调试没问题,问题在哪?为什么会多出数据00?
展开
展开全部
这是因为VB使用的是Unicode编码,在这种编码模式下,任何字符都是占用两个字节的(换句话说不但汉字占用两个字节,连半角的英文字母、数字、符号等也是两个字节的),比如
"abc1"这个字符串的ASCII码(16进制)在ANSI编码下为“61 62 63 31”,但在Unicode中则变为“61 00 62 00 63 00 31 00”。
要想解决这个问题,你必须用字节数组而不是字符串变量来接收数据,并且要按字节读取而不是按字符读取。也可以采用编码转换函数强制把Unicode编码转换为ANSI编码,比如:
Dim s As String
s = "abc1"
s = StrConv(s, vbFromUnicode)
但要注意,转换后的字符串是不能在VB直接使用的(将是乱码),只能作为数据来使用(读取的时候必须按字节读取,比如MidB(s, 1, 1))。
"abc1"这个字符串的ASCII码(16进制)在ANSI编码下为“61 62 63 31”,但在Unicode中则变为“61 00 62 00 63 00 31 00”。
要想解决这个问题,你必须用字节数组而不是字符串变量来接收数据,并且要按字节读取而不是按字符读取。也可以采用编码转换函数强制把Unicode编码转换为ANSI编码,比如:
Dim s As String
s = "abc1"
s = StrConv(s, vbFromUnicode)
但要注意,转换后的字符串是不能在VB直接使用的(将是乱码),只能作为数据来使用(读取的时候必须按字节读取,比如MidB(s, 1, 1))。
追问
可以赋值到byte数组里然后读取吗?
或者是直接把串口收到的数赋值给数组
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询