负ASCII值
负ASCII值有什么意义?
int a = '«'; //a = -85 but as in ASCII table '<<' should be 174
这是编译器的char
类型为有符号整数类型的假象, int
是更宽的有符号整数类型,因此字符常量被视为负数,并且符号扩展为更宽的整数类型。
它没有多大意义,只是发生了。 C标准允许编译器实现选择是否将char
视为有符号或无符号。 有些编译器甚至有编译时间开关来改变默认值。 如果要确保char
类型的unsigned char
,请分别显式写入signed char
或unsigned char
。
使用unsigned char
扩展为int
以避免负的int
值,或者打开一个全新的Pandora的盒子并享受wchar
。
没有负的ASCII值。 ASCII包括128个字符的定义。 他们的指数都是正数(或零!)。
您看到此负值,因为该字符来自扩展的ASCII集,并且太大而无法容纳char字面值。 因此,该值溢出到您的char
(在您的系统上签名,显然)定义为负面。
解决方法是直接写入值:
unsigned char a = 0xAE; // «
我用惯用的hex表示法编写它,因为我认为它看起来比174
更漂亮。 🙂
哪有这回事。 ASCII是一个字符表,每个字符在表中都有一个索引或一个位置。 没有“负面”指数。
但是,有些编译器认为char
是一个带符号的整数数据类型,这可能是造成混淆的原因。
如果将其打印为unsigned int
,则会将相同的位解释为无符号(正)值。
ASCII范围0..127,ANSI(也称为“扩展ASCII”)范围为0..255。
ANSI范围不适合签名字符(大多数编译器中字符的默认类型)。
大多数编译器都有像’char’类型是无符号(GCC)的选项。
我有这个神器。 当您使用char作为符号时,您没有问题。 但是当你将它用作整数(使用isalpha()等)并且ASCII代码大于127时,则’char’解释为’signed char’并且isalpha()返回exception。 当我需要使用’char’作为整数时,我将’char’转换为unsigned:
- isalpha((unsigned char)my_char);
@ n0rd:koi8代码页使用128到255的ascii和其他国家代码页: http : //www.asciitable.com/
在字符表示中,您分配了8位(1个字节)。 除此之外,第一位用于表示符号。 在无符号字符的情况下,它使用全8位来表示允许0到255的数字,其中128-255被称为扩展ASCII。 由于我所描述的内存中的表示,我们有-1具有与255相同的值, char(-2)==char(254)