【问题标题】:C, how to put number split over an array, into intC,如何将数组中的数字拆分为int
【发布时间】:2015-03-31 11:01:00
【问题描述】:

假设我有char array[10][0] = '1'[1] = '2'[2] = '3' 等。

我将如何使用 C 从这些索引创建 (int) 123

我希望在 arduino 板上实现这一点,该板仅限于 2kb 的 SRAM。所以足智多谋和效率是关键。


感谢 Sourav Ghosh,我通过自定义函数解决了这个问题:

long makeInt(char one, char two, char three, char four){
  char tmp[5];
  tmp[0] = one;
  tmp[1] = two;
  tmp[2] = three;
  tmp[3] = four;

  char *ptr;
  long ret;
  ret = strtol(tmp, &ptr, 10);

  return ret;
}

【问题讨论】:

  • 您的数组是否总是包含有效值?
  • 是的,之前有错误处理

标签: c arrays string strtol


【解决方案1】:

我想你需要知道的是strtol()。阅读详情here

仅引用重要部分

long int strtol(const char *nptr, char **endptr, int base);

strtol() 函数根据给定的basenptr 中字符串的初始部分转换为long integer 值,该值必须介于236 之间,或者是特殊值0

【讨论】:

    【解决方案2】:
    int i = ((array[0] << 24) & 0xff000000) |
                    ((array[1] << 16) & 0x00ff0000) |
                    ((array[2] << 8) & 0x0000ff00) |
                    ((array[3] << 0) & 0x000000ff);
    

    这应该可以工作

    【讨论】:

    • 仅在此数组中有十六进制数字时有效。然而,OP 有十进制数字作为 ASCII 代码
    • 如果有 5 个数字也会失败
    • 一个整数是 4 个字节。数组 4 个索引应该参与其中
    【解决方案3】:

    如果您没有可用的 strtol()atoi() 库,请使用:

    int result = 0;
    for(char* p = array; *p; )
    {    
        result += *p++ - '0';
        if(*p) result *= 10; // more digits to come
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多