C中的字符到整数的转换

标签 c char

如果我想将单个数字 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/

相关文章:

c - gcc 正在工作,但没有产生可执行文件

c - 在双向链表当前位置插入节点

c - 如何在 FreeBSD/Mac OS X 中从 Mutex 对象获取拥有的线程 ID

c++ - char字符串长度和内存泄漏

c# - 从单词和数字中提取值

c - HTTP代理实现: content encoding error

c - 运算符优先级 - 表达式评估

java - 在 Java 中使用 Unsigned int 32 位?

c - 在 C 中扫描和打印字符时出现奇怪的代码交互

java |将 2D int 数组转换为 2D char 数组以用于 println