执行字符集中字符的值是多少?

时间:2013-05-02 13:39:34

标签: c++

引自C ++ 03 2.2字符集:

  

“基本执行字符集和基本执行   宽字符集应各自包含基本的所有成员   source character set ..执行成员的值   字符集是实现定义的,以及任何其他成员   是特定于语言环境的。“

根据此,'A'属于执行字符集,其值是实现定义的。所以它不是65(十进制的'A'的ASCII码),是什么?!

// Not always 65?
printf ("%d", 'A');

或者我对执行字符集中字符的有误解?

2 个答案:

答案 0 :(得分:5)

当然,如果执行字符集是ASCII或超集(例如UTF-8),它可以是ASCII的65。

它没有说“它不能是ASCII”,它说它是“执行字符集”。

答案 1 :(得分:1)

因此,该标准允许“执行字符集”是除ASCII或ASCII衍生物之外的其他内容。一个例子是IBM长期使用的EBCDIC字符集(可能还有关于使用EBCDIC的机器,但我怀疑在过去10到15年内构建的任何东西都不会使用它)。 EBCDIC中的字符编码与ASCII完全不同。

因此,在代码中期望'A'的值是任何特定值是不可移植的。还有一大堆其他“常见假设”将失败 - A-Z之间没有“漏洞”,并且'A' - 'a'== 32在EBCDIC中都是假的。至少字符A-Z的顺序正确! ;)