根据 that ü 的站点 ASCii 值是 129,但是当我运行 printf("%d",'ü') 代码时,输出是 -4。这是什么原因?
最佳答案
您得到 -4 基本上纯属偶然,因为它取决于您环境的语言环境设置和编译器的实现。
其他人已经指出,根据您的平台是否认为 char
有符号,打印一个 char 值就好像它是一个整数可能会为 0x80 的值产生负数
及更高。
至于编码(请注意,下面的列表并不详尽):
ü
没有 ASCII 值,因为 (US-) ASCII只定义最多 0x7f (127) 个字符。
IBM Codepage 437和 850 (DOS) 在 0x81
处有 ü
,根据符号为 -127 或 129。
ISO-8859-1 through -4, -9, -10, and -13 through -16以及 Windows 代码页 1250和 1252 ü
在 0xfc
(-4/252)。其他 ISO-8859 编码的字符集中没有 ü
。
UTF-8 - 每个人都应该使用它来代替过去的 variety 的那些 8 位编码的 reasons - 将 ü
编码为双字节序列 0xc3 0xbc
。
我整理了一个供个人使用的并排代码页,如果您有兴趣,可以在 my homepage 找到它。 .
一旦你理解了这一点,请注意该标准定义了两个 character sets ,一种用于表示源代码,一种用于表示可执行代码中的字符串。两者都不包含超出基本 A-Z 范围的任何字符,两者实际上可能不同(想想交叉编译器),并且都没有定义其数字表示 - 即您实际上可能正在查看 EBCDIC ,其中字符甚至没有使用连续值进行编码(即,assert( 'Z' - 'A' == 26 )
会失败)。
你觉得这很有趣吗?好吧,基本上您的机器甚至不必提供像 @
这样的字符,因为它是 ASCII,但不是基本字符集的一部分。 ;-)
一般来说,一旦您在源代码中使用了非 ASCII 字符,您就会留下明确定义的行为并依赖于实现/环境。
关于c++ - C++ 中 ü 的 ASCii 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879836/