為什麼漢字在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