Dim buf(0 To 4) As Byte
Dim buf1() As Byte
buf(0) = &HC8
buf(1) = &HC8
buf(2) = 4
buf(3) = &H80
buf(4) = &H81
Dim str As String
str = StrConv(buf, vbUnicode)
buf1 = StrConv(str, vbFromUnicode)
执行上述代码后,发现,buf1(4)的值为0
如果buf(3)不是&H80,则不存在这个问题
如果buf(4)的值<&H80,也不存在这个问题
哪位高手能否解释一下这是怎么回事,该如何解决这个问题?
Dim buf1() As Byte
buf(0) = &HC8
buf(1) = &HC8
buf(2) = 4
buf(3) = &H80
buf(4) = &H81
Dim str As String
str = StrConv(buf, vbUnicode)
buf1 = StrConv(str, vbFromUnicode)
执行上述代码后,发现,buf1(4)的值为0
如果buf(3)不是&H80,则不存在这个问题
如果buf(4)的值<&H80,也不存在这个问题
哪位高手能否解释一下这是怎么回事,该如何解决这个问题?
其实起作用的只是 字节中的低7位,譬如&H00 转化为unicode后会在最高字节加1,就是 &H80 。反之,如果想从unicode 转换为字节的话(使用StrConv str, vbFromUnicode )就会把最高字节变成0。 所以unicode能表示的最大数即 低7位全部为1的就是127(&H7F) ,大于127的话譬如128(&H80),在unicode编码中会看做是 0 ,也就是转化为byte的话 变成了 (&H00)