我有 char 数组:
char c[10]="ff213";
我需要将char的一个元素转换为int。我试过这个:
int i=atoi(c[2]);
但我得到运行时错误。和这个:
int i=(int)c[2];
但它返回 50 而不是 2。我该怎么做?
像这样:
const int digit2 = c[2] - '0';
这是有效的,因为 C 保证十进制数字的编码是按顺序排列的并且没有任何间隙。
这不是(如您所见)“演员”,它只是简单的计算。如果您转换字符,您将获得编码的表示为整数,在您的情况下为 50(十六进制 0x32),这是数字 2 的 ASCII(和 UTF-8 以及一堆其他编码)编码。
您收到错误的原因是atoi()
需要一个字符串(即 achar*
到一个以 null 结尾的字符串)。
不仅您给出atoi()
的是字符而不是指针,空字节 ( '\0'
) 仅存在于第 5 个字符之后。
完成您所追求的最简单的方法是:
int i = c[2] - '0';
这样,'2'
(50) 的 ascii 码减去'0'
(48) 的 ascii 码,得到 的正确答案i
。