【问题标题】:How to convert character '1' and character '0' to an integer 10 in C?如何在C中将字符'1'和字符'0'转换为整数10?
【发布时间】: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

标签: c arrays string integer


【解决方案1】:

如果总是两位数:

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好。
【解决方案2】:

我建议这样开始:

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 */ 

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

【讨论】:

  • ANSI C 确实保证十进制数字的字符编码是有序且连续的。
  • C11 §5.2.1 字符集,¶3:“在源和执行基本字符集中,上面列表中0之后的每个字符的值小数位数应比前一个值大一。”
  • 能否请您指出标准中的具体段落? AFAIR,对字符集的性质和结构没有任何假设。
  • 有几个假设;例如,所有的英文字母表和几个标点符号都存在。除此之外,如上所述,对数字的顺序还有一个额外的限制。
  • 也许你可以写你的答案使用strtol()而不是atoi(),因为你建议不要使用atoi()
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 2016-01-20
  • 1970-01-01
  • 2015-09-22
  • 2010-09-24
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多