我可以总是假设字符“0”到“9”在任何 C 字符编码中按顺序出现吗

Can I always assume the characters '0' to '9' appear sequentially in any C character encoding

我正在用 C 编写一个程序,将一些字符串转换为整数。我之前实现的方式是这样的

int number = (character - '0');

这对我来说总是完美的,但我开始思考,是否有任何系统使用一些晦涩的字符编码,其中字符“0”到“9”不会按顺序依次出现?此代码假定“1”在“0”之后,“2”在“1”之后,依此类推,但是否存在不正确的情况?

是的,这是C标准保证的。

N1570 5.2.1 第 3 段说:

In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.

这种保证是可能的,因为 ASCII 和 EBCDIC 恰好都有这个 属性。

请注意,字母没有相应的保证;在 EBCDIC 中,字母没有连续的代码。