如何在C中将char转换为整数?

Cut*_*ute 90 c int char

可能重复:
如何将单个char转换为int 字符转换为
C中的整数

任何人都可以告诉我如何转换charint

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

int i=int(c[0]);

printf("%d",i);
Run Code Online (Sandbox Code Playgroud)

当我尝试这个它给49.

Pau*_*lin 153

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

int i = c[0] - '0';
Run Code Online (Sandbox Code Playgroud)

但在Unicode的这些日子里,这不是一个好主意.如果您的代码必须在非ASCII计算机上运行,​​那绝不是一个好主意.

编辑:虽然它看起来很黑,显然它可以通过标准来保证工作.谢谢@Earwicker.

  • @Paul,实际上C标准确实保证了这一点.第2.2.1段"在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个值的值." 因此,您的答案在符合C的实现中完全有效. (33认同)

Fra*_*uma 38

标准功能atoi()可能会做你想要的.

使用"atoi"的简单示例:

#include <unistd.h>

int main(int argc, char *argv[])
{
    int useconds = atoi(argv[1]); 
    usleep(useconds);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你传递&c到期望一个空终止字符串的东西,你将会处于一个受伤的世界. (47认同)
  • atoi采取char*而不是char. (11认同)
  • 不,没错,它需要一个以NULL结尾的char*而不仅仅是一个地址. (3认同)
  • @ Frans,Noldorin:我认为"只是"传递指向char数组的指针是非常危险的,该数组不是NULL,而是终止于期望以NULL结尾的字符串的函数.在示例中,从char数组中删除冒号,代码将读取未初始化的内存. (2认同)