如何在C中将char转换为整数? [复制]

Posted

技术标签:

【中文标题】如何在C中将char转换为整数? [复制]【英文标题】:How to convert char to integer in C? [duplicate] 【发布时间】:2010-10-26 11:48:57 【问题描述】:

可能的重复:How to convert a single char into an intCharacter to integer in C

谁能告诉我如何将char 转换为int

char c[]='1',':','3';

int i=int(c[0]);

printf("%d",i);

当我尝试这个时,它给出了 49。

【问题讨论】:

最简单的就是int x = -1; if (isdigit(c)) x = c - 48; 【参考方案1】:

在过去,当我们可以假设大多数计算机使用 ASCII 时,我们会这样做

int i = c[0] - '0';

但在 Unicode 时代,这不是一个好主意。如果您的代码必须在非 ASCII 计算机上运行,​​这绝不是一个好主意。

编辑:虽然它看起来很老套,但显然它由标准保证工作。谢谢@Earwicker。

【讨论】:

不工作。我希望答案为 1,但我认为它给出了一个 6 位数的数字垃圾 对不起,我把它改成了 c[0],因为这是示例代码使用的。 unicode 如何影响 char 变量中数字的表示? @David,你可能是对的。我只是在想 Unicode 字符集中可能有一些看起来像数字但不是的东西。但实际上,问题在于其他字符集,因为标准不保证 0-9 是连续的整数值。 @Paul,实际上 C 标准确实保证了这一点。第 2.2.1 段“在源和执行基本字符集中,上述十进制数字列表中 0 之后的每个字符的值都应比前一个字符的值大一。”所以你的答案在符合标准的 C 实现中是完全有效的。【参考方案2】:

标准函数atoi() 可能会做你想做的事。

一个使用“atoi”的简单示例:

#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])

    int useconds = atoi(argv[1]); 
    usleep(useconds);

【讨论】:

atoi 采用 char* 而不是 char。 这不只是语义吗?一个 char* 也给出一个字符,只需传递地址。但是好吧,我没有看细节,我的 C 开始生锈了。 如果您将 &c 传递给期望以空字符结尾的字符串,那么您将陷入痛苦的世界。 不,正确地说,它需要一个以 NULL 结尾的 char* 而不仅仅是一个地址。 @Frans,Noldorin:我认为“仅仅”将一个指针传递给一个不是 NULL 终止的 char 数组的指针到一个期望 NULL 终止字符串的函数是非常危险的。在示例中,从 char 数组中删除冒号,代码将读取未初始化的内存。

以上是关于如何在C中将char转换为整数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vc++ 中将 char* 转换为 LPWSTR..........................? [复制]

如何在C ++中将字节数组中的整数转换为数字

在C中将char从大端转换为小端

如何在 Objective-C 中将字符串转换为整数? [复制]

在Java中将字符转换为整数

如何在 C 中将 void 指针转换为 char 指针