【发布时间】:2013-10-23 21:26:17
【问题描述】:
我有一个问题,我正在尝试读取图像文件,在该文件中具有列数和行数,并且我正在尝试仅读取此信息以创建像素矩阵。
例如:char numb[2];
numb[0]='1';
numb[1]='0';
我正在尝试转换为 int numb=10;
谢谢
【问题讨论】:
-
提示:'1' - '0' = 1, '0' - '0' = 0, 10 = 1 * 10 + 0
我有一个问题,我正在尝试读取图像文件,在该文件中具有列数和行数,并且我正在尝试仅读取此信息以创建像素矩阵。
例如:char numb[2];
numb[0]='1';
numb[1]='0';
我正在尝试转换为 int numb=10;
谢谢
【问题讨论】:
如果总是两位数:
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);
【讨论】:
strtol比推荐atoi好。
我建议这样开始:
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 */
但与前一种方法相比,它几乎没有什么好处(在这种特殊情况下)
【讨论】:
0之后的每个字符的值小数位数应比前一个值大一。”
strtol()而不是atoi(),因为你建议不要使用atoi()?