我试图弄清楚为什么 8 位 char 数据类型可以包含所有这些奇怪的字符,因为它们不是前 256 个字符表的一部分。
\n#include <iostream>\n\nint main()\n{\n char chars[] = " \xe5\xbf\x85 \xe8\xa5\xbf \xe2\x99\xa0 \xe2\x99\xac \xe2\x99\xad \xe2\x99\xae \xe2\x99\xaf";\n std::cout << "sizeof(char): " << sizeof(char) << " byte" << std::endl;\n std::cout << chars << std::endl;\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n
8 位最多char只能保存 256 个值。但 Unicode 有数十万个字符。它们显然无法融入一个单一的char. 因此,它们必须以适合多个s 的方式进行编码。 char
您的编辑器/编译器可能以UTF-8编码存储示例字符串。UTF-8 中的非 ASCII 字符占用超过 1 char。
在您的示例中,在 UTF-8 中,大小sizeof(chars)将为55+1=56 chars (空终止符为 +1),即使您只看到 29 个“字符”(如果计算空格),其中:
= 0x20(18x)
\n = 0xF0 0x9F 0x98 0x8E
\n = \ n = \n = \n = \n = \n = \n = \n = \n = \n =0xF0 0x9F 0xA5 0xB80xF0 0x9F 0xA4 0xA90xF0 0x9F 0xA5 0xB3\xe5\xbf\x850xE5 0xBF 0x85\xe8\xa5\xbf0xE8 0xA5 0xBF\xe2\x99\xa00xE2 0x99 0xA0\xe2\x99\xac0xE2 0x99 0xAC\xe2\x99\xad0xE2 0x99 0xAD\xe2\x99\xae0xE2 0x99 0xAE\xe2\x99\xaf0xE2 0x99 0xAF
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |