2012-01-18 17:03:13| 分类: 1_EXCELVBA | 标签: |举报 |字号大中小 订阅
用 AscW() 获得字符的 Unicode 码(UCS-2),所返回的值是一个短整型。但是因为 VB 的 Integer 型是带符号的,所以会出现部分字符代进去 AscW() 返回负值的情况,这样必须进一步处理才能获得正确的 Unicode 码。
研究了一下,想出了三种方法,贴上来分享,另外,我还没验证哪种效率更高(特别是处理大量字符时),希望诸位帮忙比较一下(个人比较懒)!tks~~!
以“顺”(U39034)为例,AscW("顺") = -26502。
Dim uUnicode As Long ' 正确的 Unicode 码
方法 1: 拐弯法
uUnicode = Dec_16(Hex$(AscW("顺")))
其中 Dec_16(strHex As String) 是一个十六进制数转十进制数的自定义函数。
方法 2: 拆分法
Dim byteUnicode(1) As Byte
CopyMemory byteUnicode(0), AscW("顺"), 2
uUnicode = CLng(byteUnicode(1)) * 256 + byteUnicode(0)
这个方法借助 CopyMemory,拆分 Integer 为高低两字节。
方法 3: 位与法
uUnicode = CLng(AscW("X")) ' X 代表一个任意字符
If uUnicode < 0 Then
uUnicode = uUnicode And 65535 ' 将 l 的高 16 位清零
End If
最后~~分享求围观!!~~
评论