这个问题与语言无关,但受到这些c / c ++问题的启发。
How to convert a single char into an int
是否可以安全地假设数字(0123456789)的字符在所有文本编码中都是有争议的?
即。假设
是安全的'9'-'8' = 1
'9'-'7' = 2
...
'9'-'0' = 9
所有编码?
我期待着对这一个的确切答案:)
谢谢,
更新好的,让我限制所有编码以表示与ASCII和/或EBCDIC一样古老的内容。 Sandscrit我并不那么担心。 。
答案 0 :(得分:6)
我不知道所有编码,但至少用ASCII和< shudder> EBCDIC,数字0-9都连续出现,并且数字顺序递增。这意味着所有基于ASCII和EBCDIC的编码也应该按顺序排列。因此,对于你将遇到的几乎任何事情,除了莫尔斯代码或worse,我都会说是。
答案 1 :(得分:3)
你会发现很难证明是消极的。没有人能够知道所发明的每一个文本编码。
今天常用的所有编码(除了EBCDIC,它仍然是常用吗?)是ASCII的超集。我会说你更有可能赢得彩票而不是找到一个实际的环境,其中'0'到'9'的严格排序不成立。
答案 2 :(得分:3)
对于C ++和C程序文本,C ++标准和C标准都要求这样做。
答案 3 :(得分:2)
根据K& R ANSI C,它是。
摘录:
...“这个特殊的程序依赖于数字的字符表示的属性。例如,测试
if (c >= '0' && c <= '9') ...
确定
c
中的字符是否为数字。如果是,则为该数值 数字是
c - '0'
仅当
'0', '1', ..., '9'
具有连续增加的值时才有效。 幸运的是,所有字符集都是如此。 ...“
答案 4 :(得分:2)
我所知道的所有文本编码通常按顺序排列数字的每个表示。但是,当您在其他编码中包含所有其他数字表示时,您的问题会变得更加广泛,例如日语:1234567890。请注意数字的字符是如何不同的?嗯,它们实际上是不同的代码点。所以,我真的认为你的问题的答案很难,因为那里有很多编码,他们有多个数字表示。
更好的问题是问问自己,为什么我首先需要指望数字在顺序代码点?