我知道char类型的前128个符号是ASCII symbols,我的意思是如果你打印它们,它们就像在ASCII表中一样。那么剩下的呢?根据我的理解,其他128个符号没有严格定义。如果我打印下面所有可能的字符值,它将取决于什么?
char a = 0;
for (int i = 0; i < 256; i++)
{
if (i == 128)
cout << "------------------------------" <<endl;
cout << a++ <<endl;
}
我可以配置输出吗?
答案 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联系起来。