关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误。用其

关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个00,末尾数据错误。用其他串口软件调试没问题,问题在哪?为什么会多出数据00?... 关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误。用其他串口软件调试没问题,问题在哪?为什么会多出数据00? 展开
 我来答
网海1书生
科技发烧友

推荐于2016-06-30 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26225

向TA提问 私信TA
展开全部
这是因为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))。
追问
可以赋值到byte数组里然后读取吗?
或者是直接把串口收到的数赋值给数组
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式