如何转换字符';1';和字符';0';到C中的整数10?

如何转换字符';1';和字符';0';到C中的整数10?,c,arrays,string,integer,C,Arrays,String,Integer,我有一个问题,我试图读取一个图像文件,在这个文件中有列和行的数量,我试图只读取这些信息来创建一个像素矩阵。 例:charnumb[2]; 麻木[0]=“1”; 麻木[1]=“0” 我试图转换为int numb=10; 谢谢我建议这样做作为开始: if (isdigit(numb[0]) && isdigit(numb[1])) { int val = (numb[0] - '0') * 10 + (numb[1] - '0'); } 另一种方法是: char str[3

我有一个问题,我试图读取一个图像文件,在这个文件中有列和行的数量,我试图只读取这些信息来创建一个像素矩阵。 例:
charnumb[2];
麻木[0]=“1”;
麻木[1]=“0”
我试图转换为int numb=10;

谢谢

我建议这样做作为开始:

if (isdigit(numb[0]) && isdigit(numb[1])) {
    int val = (numb[0] - '0') * 10 + (numb[1] - '0');
}
另一种方法是:

char str[3] = { numb[0], numb[1], '\0' };
char* enptr;
int val = strtol(str, &endptr, 10);

if (*endptr != '\0')
    /* failed to convert */ 

但与前一种方法相比,它几乎没有什么好处(在这种特殊情况下)

如果它总是两位数:

int n = (numb[0] - '0')*10 + (numb[1] - '0');
或者您可以声明
char numb[3]
,以便
numb[0]='1',numb[1]='0',numb[2]='\0'
(基本上,将其转换为以null结尾的字符串)并使用
strtol

int n = strtol(numb, NULL, 10);

提示:“1'-'0'=1,'0'-'0'=0,10=1*10+0最好推荐
strtol
而不是
atoi
。ANSI C确实保证十进制数字的字符编码是有序和连续的。C11§5.2.1字符集,^3:“在源和执行基本字符集中,上述十进制数字列表中
0
之后的每个字符的值应比前一个字符的值大一个。“你能给我指出标准中的具体段落吗?此外,对角色集的性质和结构没有任何假设;例如,所有英文字母表和几个标点符号都存在。除此之外,如上所述,对数字的顺序还有一个额外的限制。也许您可以使用
strtol()
而不是
atoi()
,因为您建议不要使用
atoi()