注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

icbcling的博客

 
 
 

日志

 
 

vba中的ascw返回值为负值的问题,列出原因,解决方案准备用第1种,后两者是VB中的。  

2012-01-18 17:03:13|  分类: 1_EXCELVBA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

用 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

最后~~分享求围观!!~~
vba中的ascw返回值为负值的问题,列出原因,解决方案准备用第1种,后两者是VB中的。 - icbcling - icbcling的博客

  评论这张
 
阅读(240)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018