C ++ char类型值是由OS定义的吗?

时间:2012-11-19 12:49:27

标签: c++ unicode char

我知道char类型的前128个符号是ASCII symbols,我的意思是如果你打印它们,它们就像在ASCII表中一样。那么剩下的呢?根据我的理解,其他128个符号没有严格定义。如果我打印下面所有可能的字符值,它将取决于什么?

 char a = 0;
 for (int i = 0; i < 256; i++)
 {
    if (i == 128)
       cout << "------------------------------" <<endl;
    cout << a++ <<endl;
 }

我可以配置输出吗?

2 个答案:

答案 0 :(得分:3)

char的前128个值不一定与ASCII字符对应。 char的值对应于执行字符集中的字符,该字符集是实现定义的集合。此字符集的成员值是特定于语言环境的(§2.3/ 3):

  

执行字符集的成员值和其他成员集是特定于语言环境的。

字符文字(例如'a')的类型为char,其值等于执行字符集中的字符值。同样对于字符串文字。如果文字中的字符落在实现定义的执行字符集之外,则它具有实现定义的值(§2.14.4/ 5):

  

如果没有这样的编码,则通用字符名称将转换为实现定义的编码。

在许多编译器中,您可以配置执行字符集。例如,使用g++,您可以使用-fexec-charset选项。

输出文字后,对文字的解释取决于查看文字的媒介,例如终端。

答案 1 :(得分:1)

由于终端解释std::cout写入的字节,通常可以配置终端将字节显示为Latin-1,Latin-15,Cyrillic或其他任何你想要的字节。

在您的程序中,您无法配置它在显示屏上的显示方式。您唯一能做的就是代码如何解释字节。因此,为了使用Latin-1,你的程序和终端必须将这些字节的含义与Latin-1联系起来。