将char数组的一个元素强制转换为int

将char数组的一个元素强制转换为int,c,casting,char,C,Casting,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保证十进制数字的编码是顺序的,并且没有任何间隙 这不是(正如你所看到的)一个“强制转换”,它只是简单的计算。如果您强制转换字符,您将得到编码的整数表示形

我有一个字符数组:

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()
需要一个字符串(即
char*
到以空结尾的字符串)

您不仅给了
atoi()
一个字符而不是指针,空字节(
'\0'
)只在第5个字符之后存在

实现你所追求的目标的最简单方法是:

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

通过这种方式,
'2'
(50)的ascii码被
'0'
(48)的ascii码减去,并为
i

生成正确答案。最好在问题中按原样包含错误消息。它返回50而不是2,因为50是字符“2”的ascii值。展开,您的意思是
c[2]-“0”
'\0'
NUL
character@AlterMann当然,那是一个愚蠢的打字错误!谢谢如果我错了,请纠正我,但通过给atoi c[2],他实际上是在反引用c数组。给出atoi(&c[2])不是更好吗?通过调用atoi(&c[2]),他确实会使用正确的参数(即指向以null结尾的字符串的指针)调用函数,并在i中返回213。问题是他只想“转换”第三个字符,而不是下面的整个字符串。