当前位置:编程学习 > C#/ASP.NET >>

為什麼漢字在ASC碼里是負數

為什麼漢字在ASC碼里是負數,非常想知道,請高人指點! --------------------编程问答-------------------- 是的 asc编码里面汉字是-数  unicode里面是个5位数
可以互相转换 我找下代码 --------------------编程问答-------------------- 以前写的只剩下exe了 只好用Reflector看
private string EnCodeChinese(int num)
{
    num = 0x10000 - num;
    int num2 = num & 0xff;
    int num3 = (num - num2) / 0x100;
    byte[] bytes = new byte[] { (byte) num3, (byte) num2 };
    return Encoding.Default.GetString(bytes);
}
.......
 

 
--------------------编程问答-------------------- 沒有人知道為什麼是負數嗎,我很想知道的! --------------------编程问答-------------------- 我也想知道 --------------------编程问答-------------------- 因为汉字的编码超出了一个字节,如果再按一个字节来表示的话就是负数了,因为符号位被1占了. --------------------编程问答-------------------- 楼主你是怎么算出来的?也不贴个代码看看 --------------------编程问答-------------------- 标准ascII码不包括汉字,asc码只有一个字节,汉字要用两个字节来表示!
asc码只有一个字节,所以范围是0-255,得到负数是因为你使用了带符号位的输出形式, 
此时输出范围是-128至127,使用unsigned char 输出可得到0-255。
如果想知道汉字的范围的话,可以在system目录下有一个winxy文件(可能是隐藏的),用写字板打开,就可以看出第一个汉字和最后一个汉字是什么了。 --------------------编程问答-------------------- Ascii码是单字节无符号数, 西文Ascii码的值是0-127,该字节数的头一位是0,而汉字用双字节数表示, 并且低字节的头一位数是1,因此软件作为负数看待,应采用一个WORD类型的数字存储一个汉字,并且用移位的方法将高低字节分开,这样才能得到一个汉字的高低两个字节的数值.

与君共勉.
--------------------编程问答-------------------- 記前以前學校教過 --------------------编程问答-------------------- 大家都在乱说,呵呵

Asc函数是求一个单字节字符的ASCII码值,你用它取一个双字节的汉字(Unicode编码)当然要出问题了。为了区分汉字与字母,汉字的最高位都是1,转成整数当然就是负数了。

求双字节的字符的ASCII码要用AscW函数!下面举例:

    MsgBox(Asc("我"))   '显示的结果是 -12590 ,是一个负数
    MsgBox(AscW("我"))  '显示的结果是 25105,这是正确的数
--------------------编程问答-------------------- 楼上说对了。 --------------------编程问答-------------------- 学习了
--------------------编程问答-------------------- 汉字的最高位都是1转数字,肯定是负的拉 --------------------编程问答-------------------- 加上65536 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 参考:汉字的编码 --------------------编程问答-------------------- 原来是这个样子的
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,