c++ - C++ 中 ü 的 ASCii 值

标签 c++ windows encoding ascii

根据 that ü 的站点 ASCii 值是 129,但是当我运行 printf("%d",'ü') 代码时,输​​出是 -4。这是什么原因?

最佳答案

您得到 -4 基本上纯属偶然,因为它取决于您环境的语言环境设置和编译器的实现。

其他人已经指出,根据您的平台是否认为 char 有符号,打印一个 char 值就好像它是一个整数可能会为 0x80 的值产生负数 及更高。


至于编码(请注意,下面的列表并不详尽):

ü 没有 ASCII 值,因为 (US-) ASCII只定义最多 0x7f (127) 个字符。

IBM Codepage 437850 (DOS) 在 0x81 处有 ü,根据符号为 -127 或 129。

ISO-8859-1 through -4, -9, -10, and -13 through -16以及 Windows 代码页 12501252 ü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/

相关文章:

c++ - 交换运算符+重载导致无限递归

c++ - Gtk::Layout 中的 gtkmm 居中小部件

c++ - obj 应该在函数调用结束时被销毁 'f'

c - 在 C 中以 64 位整数存储值

python - Pandas 根据元素的类别拆分列

encoding - Safari 根据请求对已编码的 URL 进行编码

c++ - 并行算法寻找K个最近点

c# - 静态类必须派生自对象 (C#)

linux - 从本地 Windows PC 和 Linux 传输数据

c - RegQueryValueExW 返回 C 中的访问冲突读取位置异常