【问题标题】:How to convert a byte array to a integer?如何将字节数组转换为整数?
【发布时间】:2013-01-24 02:07:06
【问题描述】:

假设我有这个字节

uint8_t k[8]= {0,0,0,1,1,1,0,0}; 

有没有办法让它变成一个整数或十六进制?

【问题讨论】:

  • 我错误地将其标记为重复。请忽略接近投票。我很抱歉。 :-((这是一个写得很糟糕的问题,因为您自己没有表现出任何努力,但它不是重复的。)
  • 嗯,例如,您可以使用演员表,但您不应该这样做。 (类似于 int i=*(int*)k; )
  • @KenWhite 很抱歉,我会在学习过程中了解更多,因为所有这些对我来说都是全新的。
  • 对数组使用强制转换会导致可怕的、不需要的结果。它将数组的地址转换为整数。

标签: c arrays integer byte typeconverter


【解决方案1】:

如果k代表64位整数的8个字节,则遍历8位整数数组,将它们从左到右移动到结果中:

uint64_t res = 0;
for (int i = 0 ; i != 8 ; i++) {
    res <<= 8;
    res |= k[i];
}

循环的方向取决于原始int 的字节存储在k 数组中的顺序。上面的 sn -p 显示了 MSB 到 LSB 的顺序;如果数组是 LSB 到 MSB,则从 7 开始循环,然后下降到零。

如果字节代表单个位,则移动一位而不是八位。

【讨论】:

    【解决方案2】:

    这应该可以解决问题:

    int convertToInt(uint8_t k[8], bool leastSignificantFirst) { 
        int res = 0;
        for (int i = 0; i < 8; ++i) { 
            if (leastSignificantFirst) { 
                res |= (k[i] & 1) << (7 - i);
            } else {
                res |= (k[i] & 1) << i;
            }
        }
        return res;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2018-11-19
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多