我有一个数组定义为
int data[k];
其中 k 是数组的大小。数组的每个元素都是 0 或 1。我想将二进制数据保存在定义为
的另一个数组中uint8_t new_data[k/8];
(k通常是8的倍数)。
我怎样才能用 C 语言做到这一点?
提前致谢
最佳答案
假设 k
是 8
的倍数,假设“每个元素都是二进制”,意思是“每个 int
是 >0
或 1
”,同时假设 data
中的位按从最高有效位到最低有效位的顺序排列,并且 new_data
的字节按顺序排列打包为大尾数(所有合理的假设),那么这就是你如何做到的:
for (int i = 0; i < k/8; ++i)
{
new_data[i] = (data[8*i ] << 7) | (data[8*i+1] << 6)
| (data[8*i+2] << 5) | (data[8*i+3] << 4)
| (data[8*i+4] << 3) | (data[8*i+5] << 2)
| (data[8*i+6] << 1) | data[8*i+7];
}
关于在c中将二进制int转换为二进制uint8_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52793256/