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

可能的重复:
How to convert a single char into an int
Character 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; }

标签: c char int


【解决方案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 数组中删除冒号,代码将读取未初始化的内存。
猜你喜欢
  • 1970-01-01
  • 2020-02-06
  • 2013-01-25
  • 2013-04-03
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 2012-06-21
  • 2016-02-20
相关资源
最近更新 更多