查看: 494  |  回复: 0
  VB6 串口通信,发送正常,接收的数据总是不对,数据中多了几个 00
楼主
发表于 2023年4月13日 16:42

因为VB6使用的是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))。

Private Sub Command1_Click()
    Dim byteData() As Byte
    Dim strAll$
    Dim i&
    
    strAll = "a你好b"
    ReDim byteData(Len(strFileBlock))
    
    '将字符串转换为字节数组
    byteData = StrConv(strAll, vbFromUnicode) '将 Unicode 字串转换为 Ansi
    
    For i = 0 To UBound(byteData)
        Debug.Print byteData(i)
    Next
    
    Debug.Print "-------------------"
    
    byteData = StrConv(strAll, vbUnicode) '将 Ansi 字串转换为 Unicode
    
    For i = 0 To UBound(byteData)
        Debug.Print byteData(i)
    Next
End Sub

运行结果:

 97 
 196 
 227 
 186 
 195 
 98 
-------------------
 97 
 0 
 0 
 0 
 96 
 0 
 79 
 0 
 125 
 0 
 89 
 0 
 98 
 0 
 0 
 0


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com