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