C++ 中 ü 的 ASCii 值
ASCii value of ü in C++
根据该站点的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到-4,-9,-10,-13到-16以及Windows代码页1250和1252在0xfc
(-4/252)处有ü
。其他ISO-8859编码在其字符集中没有ü
。
UTF-8——由于各种原因,每个人都应该使用它来代替过去的8位编码——将ü
编码为两字节序列0xc3 0xbc
。
我已经把一个并排的代码页放在一起供个人使用,如果你感兴趣,你可以在我的主页上找到它。
一旦你接受了这一点,就要注意标准定义了两个字符集,一个用于表示源代码,另一个用于表示可执行代码中的字符串。两者都不包含任何超出基本A-Z范围的字符,两者实际上可能是不同的(考虑交叉编译器),并且两者都没有定义其数字表示-例如,您实际上可能正在查看EBCDIC,其中字符甚至没有用连续值编码(即assert( 'Z' - 'A' == 26 )
将失败)。
你觉得好笑吗?嗯,基本上你的机器甚至不需要提供像@
这样的字符,因为那是ASCII,但是不是基本字符集的一部分。: -)
一般来说,一旦您在源代码中使用非ascii字符,您就放弃了定义良好的行为,而依赖于实现/环境。
在您的系统中char是有符号类型。在打印前应先转换为无符号类型。
printf("%d", (unsigned char)'ü');
这是否会打印您期望的129是另一回事,但它至少会在执行字符集中打印ü的编码。
%d打印的是一个带符号的十进制数,对于一个字节来说,打印的范围是-128-127)。您可能想使用unsigned (%u),它将输出预期的0-255。
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- ascii 和 unicode 在处理级别有什么区别吗?
- 在C++中使用 ASCII 代码将输入从小写转换为大写
- 弄清楚如何在C++中将整数读入 ASCII
- 如何修复艺术ASCII,我点击一个字母就可以了,但输入一个阶段艺术出来了
- 使用指针将 ASCII 值添加到整数
- 用于 ASCII 的环绕式 C++
- RE2 不匹配非 ASCII 字符
- 打印从 0 到 255 的所有 ASCII 字符
- C++ 电话号码字母拨号程序 - 语法错别字?还是非 ASCII 字符?
- 无符号字符打印其 ASCII 值
- Windows 非 ASCII 文件路径
- 非 ASCII 文件路径窗口
- 我的程序将 26 个字母转换为 ascII 没有显示正确答案
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- C++扩展 ASCII 和负值