0

我知道 char 类型的前 128 个符号是ASCII 符号,我的意思是,如果您打印它们,它们的计算方式与 ASCII 表中的一样。现在剩下的人呢?据我了解,其他 128 个符号并未严格定义。如果我打印如下所有可能的 char 值,这取决于将打印什么?

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

我可以配置输出吗?

4

2 回答 2

3

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

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

字符文字(例如)的'a'类型char和值等于执行字符集中的字符值。对于字符串文字也是如此。如果您的文字中的字符超出实现定义的执行字符集,则它具有实现定义的值(第 2.14.4/5 节):

如果没有这样的编码,universal-character-name 将被转换为实现定义的编码。

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

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

于 2012-11-19T12:53:23.257 回答
1

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

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

于 2012-11-19T12:54:23.473 回答