为什么VB中使用ASCW函数得到的值是负数?
来源:百度知道 编辑:UC知道 时间:2024/06/25 11:40:44
先将输入的字符转换成UNICODE码,
再将得到的UNICODE码中的字符一一再次转换成UNICODE代码。
&#-27108;&#-27085;一中
这是“阜阳一中”4个字转换后的结果,去百度发帖,结果出现:
-27108;-27085;一中
再复制这一行去发帖就是 -27108;-27085;一中
为什么“阜阳”2个字转换出来的是负数呢????
我仔细看了代码好像也没有错啊
再将得到的UNICODE码中的字符一一再次转换成UNICODE代码。
&#-27108;&#-27085;一中
这是“阜阳一中”4个字转换后的结果,去百度发帖,结果出现:
-27108;-27085;一中
再复制这一行去发帖就是 -27108;-27085;一中
为什么“阜阳”2个字转换出来的是负数呢????
我仔细看了代码好像也没有错啊
因为ascw返回的数据类型是integer型,“阜阳”两个字的UNICODE码是0x961C和0x9633,即38428和38451,大于32767的上限
要得到正数的话必须定义一个long型的变量来转换
lngReturn = clng("&h" & hex((ascw("阜"))))
debug.print lngReturn
lngReturn = clng("&h" & hex((ascw("阳"))))
debug.print lngReturn
结果是
38428
38451
代码是哪里来的?贴出来看看,应该还是代码有问题,如果是你自己写的,请尝试让代码在处理过程中遇到负数就把它加上一个65536,看结果是否满意
===================
重写一个转换函数
Private Sub Form_Load()
ToUnicode "阜阳一中", s$
Debug.Print s
End Sub
Sub ToUnicode(s$, u$)
For i& = 1 To Len(s)
u = u & "" & (AscW(Mid(s, i, 1)) + 65536) Mod 65536 & ";"
Next
End Sub