首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB用chr函数返回的字符再用asc函数返回他的Ascii码,如何不一样

2013-01-05 
VB用chr函数返回的字符再用asc函数返回他的Ascii码,怎么不一样?我在用chr函数的时候发现一个问题,例如我输

VB用chr函数返回的字符再用asc函数返回他的Ascii码,怎么不一样?
我在用chr函数的时候发现一个问题,例如我输入asc(chr(1561)),但出来的却不是1561,为什么?MSDN对这两个函数是这样解释的:


Chr 函数
返回 String,其中包含有与指定的字符代码相关的字符 。

    0 到 31 之间的数字与标准的非打印 ASCII 代码相同。例如,Chr(10) 可以返回换行字符。charcode 的正常范围为 0 – 255。然而,在 DBCS 系统,charcode 的实际范围为 -32768 到 65535。
    注意:ChrB 函数作用于包含在 String 中的字节数据。ChrB 总是返回一个单字节,而不是返回一个字符,一个字符可能是一个或两个字节。ChrW 函数返回包含 Unicode 的 String,若在不支持 Unicode 的平台上,则其功能与 Chr 函数相同。


Asc 函数
返回一个 Integer,代表字符串中首字母的字符代码。

    说明:在非 DBCS 系统下,返回值范围为 0 – 255 。在 DBCS 系统下,则为 -32768 – 32767。
    注意:AscB 函数作用于包含在字符串中的字节数据,AscB 返回第一个字节的字符代码,而非字符的字符代码。AscW 函数返回 Unicode 字符代码,若平台不支持 Unicode,则与 Asc 函数功能相同。


那么照MSDN说的,这两个函数的功能是互逆的,互为反函数,那么asc(chr(1561))出来的应该是1561啊,但不是。
    我又试了一下,发现128以下的,出来的确实是我原本输入的数;但是大于128的数,出来的数似乎就没有规律了,129,8124,7986,这几个我尝试过的都是返回63,查MSDN知道这是&。似乎没有什么规律。然后我还试了MSDN所说的xxxB和xxxW函数,都不行。
    到底是怎么回事?我怎么才能拿回大于128的数呢?
[解决办法]
引用:
引用:
试试asc(chr(-10544))
真正的Ascii码只占一个字节,共128个字符,其余汉字等的Ascii码,是扩展的本地编码,如Gb-2312,占两字节,首字节首位为1,因此Asc(汉字)的结果应为负数(负整型的首位也为1),所以不会有大于128的编码(你的1561大了);同理chr(编码),这里的编码也应为负数才能得到一个汉字。
但是我输入c……

1561首字节为0,chr(1561)只不过把1561(00000110 00011001)的首字节(00000110,十进制6)转为字符"_",不会报错的。
原来的编码,你要的是ansi(ascii+本地码)码还是utf-16码?asc得到的是ansi码,ascw得到的是utf-16码,这些都是"原来的编码",尽管你看起来负数怪怪的,你可以用hex(asc(字符))来得到十六进制码,不是负的了,真正的“原来的十六进制编码”

热点排行