VB用chr函数返回的字符再用asc函数返回他的Ascii码,如何不一样
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的数呢?
[解决办法]1561首字节为0,chr(1561)只不过把1561(00000110 00011001)的首字节(00000110,十进制6)转为字符"_",不会报错的。
原来的编码,你要的是ansi(ascii+本地码)码还是utf-16码?asc得到的是ansi码,ascw得到的是utf-16码,这些都是"原来的编码",尽管你看起来负数怪怪的,你可以用hex(asc(字符))来得到十六进制码,不是负的了,真正的“原来的十六进制编码”