请教汉字的ASCII码问题

来源:互联网 发布:nba直播软件 编辑:程序博客网 时间:2024/06/04 23:20

请教汉字的ASCII码问题

作者:asanscape      发表时间:2006-4-27 20:06:00   

 楼主  


"国"的ASCII码是十六进制的B9FA,亦即十进制的47610,在VB中经调试得
       ASC(47610)="国". 
但是,反过来,求"国"的ASCII码,却是
          asc("国")=-17926.
请问何故?我如何在VB中得到47610?

 

作者:帅哥阳伞      发表时间:2006-4-27 20:25:00   

 1楼  

ASC(47610)="国"吗???应该是Chr(47610)="国"才对,

你的问题解答
MsgBox Hex(Asc("国"))此时值是16进制的要转换成10进制
用函数
Private Function YtoX(ByVal x, ByVal y As Integer) As Variant
Dim s, Z%
For i = 0 To Len(CStr(x)) - 1
If UCase(Mid(CStr(x), Len(CStr(x)) - i, 1)) = "A" Then
Z = 10
ElseIf UCase(Mid(CStr(x), Len(CStr(x)) - i, 1)) = "B" Then
Z = 11
ElseIf UCase(Mid(CStr(x), Len(CStr(x)) - i, 1)) = "C" Then
Z = 12
ElseIf UCase(Mid(CStr(x), Len(CStr(x)) - i, 1)) = "D" Then
Z = 13
ElseIf UCase(Mid(CStr(x), Len(CStr(x)) - i, 1)) = "E" Then
Z = 14
ElseIf UCase(Mid(CStr(x), Len(CStr(x)) - i, 1)) = "F" Then
Z = 15
Else
Z = CInt(Mid(CStr(x), Len(CStr(x)) - i, 1))
End If
s = s + Z * (y ^ i)
Next i
YtoX = s
End Function

即MsgBox YtoX(Hex(Asc("国")), 16)'这里的16表示16进制也可以改8或其他数字
 

 

作者:asanscape      发表时间:2006-4-27 21:10:00   

 2楼  

帅哥阳伞,为什么-17926和47610转化为十六进制的值是相同的呢?这两个数之间倒底有什么关系?
你的解答我看了以后非常高兴!但除此"绕弯法"有没有其他途径?如果能找出这两个数之间的关系或许能直接转化而不必去HEX那里兜一圈?
 

 

作者:iamben250      发表时间:2006-4-27 21:18:00   

 3楼  

chrw和ascw是一对
 

 

作者:帅哥阳伞      发表时间:2006-4-27 22:10:00   

 4楼  

我们知道,GB2312编码规则中,加80H意在把最高二进制位置“1”,以与基本ASCII码相区别,或者说是识别是否汉字的标志位。将高位置1用二进制表示意味着这是一个负数。

在VB中,函数Asc返回一个字符的码位,对于单字节字符返回的是0到255的整数,对于双字节的字符返回的是-32768到32767之间的有符号整数。返回的数值根据操作系统当前线程使用的缺省代码页决定,这是在System.Globalization命名空间(namespace)当中TextInfo类的ANSICodePage属性。比如,当前线程使用的代码页是GB2312(代号936),那么返回的就是GB2312码位值,对于所有的GB2312字符集里面的字符,asc函数返回的都是一个负数。
AscW 返回的是统一码(Unicode)字符的码位, 它是一个0到65536之间的整数,这个数值跟当前线程中的国家地区和代码页设置没有关系。
 

 

作者:seawaycao      发表时间:2006-4-28 9:15:00   

 5楼  

有兴趣……顶一下!!
 

 

作者:凡尘      发表时间:2006-4-28 10:15:00   

 6楼  

int型无符号数:47610与47610-65536是一个值
可用计算器看看结果:先单字,输入-17926转换成2进制再转换成10进制就是47610
 
原创粉丝点击