2

这个问题与语言无关,但受到这些 c/c++ 问题的启发。

如何将单个char转换为int

C中的char到int转换

假设数字字符(0123456789)在所有文本编码中连续出现是否安全?

即可以安全地假设

'9'-'8' = 1
'9'-'7' = 2
...
'9'-'0' = 9

在所有编码中?

我期待这个问题的明确答案:)

谢谢,

更新:好的,让我将所有编码限制为像 ASCII 和/或 EBCDIC 以及之后的任何东西。Sandscrit 我不那么担心。. .

4

5 回答 5

6

我不知道所有的编码,但至少在 ASCII 和 <shudder> EBCDIC 中,数字 0-9 都是连续出现的,并且以递增的数字顺序出现。这意味着所有基于 ASCII 和 EBCDIC 的编码也应该按顺序排列其数字。所以对于你会遇到的几乎任何事情,除非莫尔斯电码或更糟,我会说是的。

于 2009-04-23T16:07:41.930 回答
3

你会发现很难证明是否定的。没有人可能知道曾经发明的每一种文本编码。

今天常用的所有编码(除了 EBCDIC,它仍然常用吗?)都是 ASCII 的超集。我会说你更有可能赢得彩票,而不是找到一个不存在严格排序的“0”到“9”的实际环境。

于 2009-04-23T16:18:39.237 回答
3

对于 C++ 和 C 程序文本,C++ 标准和 C 标准都要求这样做。

于 2009-04-23T16:19:54.117 回答
2

根据 K&R ANSI C,它是。

摘抄:

...“这个特定的程序依赖于数字的字符表示的属性。例如,测试

if (c >= '0' && c <= '9') ...

判断字符是否c为数字。如果是,则该数字的数值为

c - '0'

这仅在'0', '1', ..., '9'具有连续增加的值时才有效。幸运的是,这适用于所有字符集。……”

于 2009-04-23T16:17:38.927 回答
2

我所知道的所有文本编码通常按顺序对数字的每个表示进行排序。但是,当您在其他编码中包含所有其他数字表示时,您的问题会变得更加广泛,例如日语:1234567890。注意数字的字符有何不同?好吧,它们实际上是不同的代码点。所以,我真的认为你的问题的答案可能很难,因为那里有很多编码,而且它们中有多种数字表示。

一个更好的问题是问自己,为什么我首先需要指望数字在顺序代码点中?

于 2009-04-23T16:25:11.403 回答