首页 > 解决方案 > 在c中将二进制int转换为二进制uint8_t

问题描述

我有一个数组定义为

int data[k];

其中 k 是数组的大小。数组的每个元素都是 0 或 1。我想将二进制数据保存在另一个定义为的数组中

uint8_t new_data[k/8];

(k 通常是 8 的倍数)。
我怎样才能在 C 中做到这一点?

提前致谢

标签: cbinaryinthexuint8t

解决方案


假设new_data从 0 开始初始化,data[i]仅包含零和一,并且您希望首先填充最低位:

for(unsigned i = 0; i < k; ++i) {
    new_data[i/8] |= data[i]<<(i%8);
}

一个可能更快的实现1可能是:

for(int i = 0; i < k/8; ++i) {
    uint8_t o = 0;
    for(int j = 0; j < 8; ++j) {
        o |= data[i*8]<<j;
    }
    new_data[i] = o;
}

(请注意,这基本上假设它k是 8 的倍数)


  1. 它通常更容易优化,因为内部循环具有较小的已知边界,并且它写入的变量只有那么小范围;这对优化器来说更容易处理,例如,您可以看到使用 gcc内部循环会完全展开

推荐阅读