为什么VB中使用ASCW函数得到的值是负数?

来源:百度知道 编辑:UC知道 时间:2024/06/25 11:40:44
先将输入的字符转换成UNICODE码,
再将得到的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