C++字符类型值由OS定义

C++ char type values are defined by OS?

本文关键字:OS 定义 字符 类型 C++      更新时间:2023-10-16

我知道char类型的前128个符号是ASCII符号,我的意思是,如果打印它们,它们会按照ASCII表中的原样进行配置。现在他们其他人呢?据我所知,其他128个符号并没有严格定义。取决于什么,如果我像下面这样打印所有可能的字符值,会打印什么?

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

我可以配置输出吗?

char的前128个值不一定与ASCII字符对应。char的值对应于执行字符集中的字符,是一个实现定义集。该字符集成员的值是特定于区域设置的(§2.3/3):

执行字符集的成员和附加成员集的值是特定于区域设置的。

字符文字(如'a')的类型为char,值等于执行字符集中的字符值。字符串文字也是如此。如果文字中的字符不在实现定义的执行字符集内,则它具有实现定义的值(§2.14.4/5):

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

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

一旦你输出了文本,对它的解释就取决于观看它的媒介,比如终端。

由于终端解释std::cout写入的字节,因此您通常可以将终端配置为将字节显示为Latin-1、Latin-15、西里尔字母或任何其他您想要的字符。

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