1

我有 char 数组:

char c[10]="ff213";

我需要将char的一个元素转换为int。我试过这个:

int i=atoi(c[2]);

但我得到运行时错误。和这个:

int i=(int)c[2];

但它返回 50 而不是 2。我该怎么做?

4

2 回答 2

2

像这样:

const int digit2 = c[2] - '0';

这是有效的,因为 C 保证十进制数字的编码是按顺序排列的并且没有任何间隙。

这不是(如您所见)“演员”,它只是简单的计算。如果您转换字符,您将获得编码的表示为整数,在您的情况下为 50(十六进制 0x32),这是数字 2 的 ASCII(和 UTF-8 以及一堆其他编码)编码。

于 2013-10-09T09:41:26.720 回答
1

您收到错误的原因是atoi()需要一个字符串(即 achar*到一个以 null 结尾的字符串)。

不仅您给出atoi()的是字符而不是指针,空字节 ( '\0') 仅存在于第 5 个字符之后。

完成您所追求的最简单的方法是:

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

这样,'2'(50) 的 ascii 码减去'0'(48) 的 ascii 码,得到 的正确答案i

于 2013-10-09T10:00:50.337 回答