Windows下的C语言的char类型是什么类型的字符编码,为什么能显示汉字?

施健 发布于 2012/07/14 11:36
阅读 2K+
收藏 0
ASCII , UTF-8 还是什么? wchar_t应该是utf16吧?
加载中
0
中山野鬼
中山野鬼
和编译器有关。你需要看编译器的资料。
0
周翼翼
周翼翼
写一个char *p = "中" printf("%X %X", p[0],[1]);再到网上找中的各种编码对照.
0
mallon
mallon
C语言的char wchar都没有编码,能显示汉字是因为编辑器、编译器、cmd.exe恰好“匹配“了
0
johnzhang68
johnzhang68
char 在哪个标准的C/C++编译器里都是一样的:有符号的8位数. 看你如何解释它。
0
飞翔的天地
飞翔的天地

你的源代码什么编码char就是什么编码(注:VC例外,带BOM的utf8会在编译时转换为系统编码)(注:gcc可以带参数指定编译时转码)
wchar_t在Win下是ucs2

0
中山野鬼
中山野鬼

引用来自“johnzhang68”的答案

char 在哪个标准的C/C++编译器里都是一样的:有符号的8位数. 看你如何解释它。

char 有两个含义。一个就是你说的标准8位。记得国际标准里的描述是,其和byte的位宽相同。而另一个含义从新标准扩展出来的。也有16和32位之分。现在蛮混乱的。

另外char 和符号无关。ARM下有些的C编译器,把它看成无符号的。这个C标准也没有约束。

 

johnzhang68
johnzhang68
你這樣說也沒有什麼不對,只是任何擴展或新標準都要考慮到兼容大量的以前的代碼(Legacy Code)。所以幾乎絕大部分C/C++編譯器(8位的,16位的,32位的和64位的編譯器)的char type 都是有符號的一個字節整數, 即char 等同於unsigned char. 標準本身一般不會指定數據類型的寬度,但有一個約定俗成。最大的原因也許是最初的C的創始人是這麼用的。
返回顶部
顶部