如果我想将单个数字 char
转换为其数值,例如,如果:
char c = '5';
我希望 c
保存 5
而不是 '5'
,这样做是否 100% 可移植?
c = c - '0';
我听说所有字符集都按连续顺序存储数字,所以我假设是这样,但我想知道是否有一个有组织的库函数来进行这种转换,以及它是如何按常规进行的。我是一个真正的初学者:)
最佳答案
是的,这是一个安全的转换。 C 要求它工作。此保证在最新的 ISO C 标准的第 5.2.1 节第 2 段中,该标准的最新草案是 N1570 :
Both the basic source and basic execution character sets shall have the following members:
[...]
the 10 decimal digits
0 1 2 3 4 5 6 7 8 9
[...]
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 以及从它们派生的字符集都满足这个要求,这就是为什么 C 标准能够强制执行它。请注意,在 EBCDIC 中字母不是连续的,并且 C 不要求它们是连续的。
没有库函数可以为单个 char
做这件事,您需要先构建一个字符串:
int digit_to_int(char d)
{
char str[2];
str[0] = d;
str[1] = '\0';
return (int) strtol(str, NULL, 10);
}
您还可以使用 <a href="http://www.manpagez.com/man/3/atoi/" rel="noreferrer noopener nofollow">atoi()</a>
函数进行转换,一旦你有一个字符串,但是 <a href="http://linux.die.net/man/3/strtol" rel="noreferrer noopener nofollow">strtol()</a>
更好更安全。
正如评论者所指出的那样,调用一个函数来进行这种转换是极端的矫枉过正;您最初减去“0”的方法是执行此操作的正确方法。我只是想在这里展示如何使用推荐的标准方法将数字作为字符串转换为“真实”数字。
关于C中的字符到整数的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/781668/