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,也不存在这个问题
哪位高手能否解释一下这是怎么回事,该如何解决这个问题?

解决方案 »

  1.   

    ascii码跟 unicode 的区别就是 unicode 为2个字节且,最高位为1,ascii一个字节 最高位为0
    其实起作用的只是 字节中的低7位,譬如&H00 转化为unicode后会在最高字节加1,就是 &H80 。反之,如果想从unicode 转换为字节的话(使用StrConv str, vbFromUnicode )就会把最高字节变成0。 所以unicode能表示的最大数即 低7位全部为1的就是127(&H7F) ,大于127的话譬如128(&H80),在unicode编码中会看做是 0 ,也就是转化为byte的话 变成了 (&H00)
      

  2.   

    如果你非要把byte型转化为字符的话 请使用 base64 编码
      

  3.   

    可是如果buf(3)是&H81的话,也没问题的啊,不会变成&H1的,只有在&H80时才可能出问题,而且buf(3)本身并没有变成0,而是后一个字符变成了0
      

  4.   

    终于想明白了,其实很简单,因为将80当成非中文的ASCII字符了,所以最后一个是&H81的话,就变成0了,如果再加一个buf(5)=&H82的话,就没问题了