StrConv的问题?

xiaoqiqixiao 2004-11-12 12:49:48
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,也不存在这个问题
哪位高手能否解释一下这是怎么回事,该如何解决这个问题?
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoqiqixiao 2004-11-13
  • 打赏
  • 举报
回复
终于想明白了,其实很简单,因为将80当成非中文的ASCII字符了,所以最后一个是&H81的话,就变成0了,如果再加一个buf(5)=&H82的话,就没问题了
xiaoqiqixiao 2004-11-12
  • 打赏
  • 举报
回复
可是如果buf(3)是&H81的话,也没问题的啊,不会变成&H1的,只有在&H80时才可能出问题,而且buf(3)本身并没有变成0,而是后一个字符变成了0
行云边 2004-11-12
  • 打赏
  • 举报
回复
如果你非要把byte型转化为字符的话 请使用 base64 编码
行云边 2004-11-12
  • 打赏
  • 举报
回复
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)
viena 2004-11-12
  • 打赏
  • 举报
回复
没有问题啊,不知您什么意思?

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧