我有一个整数值从 0-511(最多 9 位)的数组。我正在尝试将其写入文件fwrite
.
例如,对于数组:
[257, 258, 259]
Which is 100000001, 100000010, 100000011
I am trying to write
100000001100000010100000011 + extra padding of 0s to the file
但由于 fwrite 限制一次只能写入 1 个字节,所以我不知道如何执行此操作。我对按位运算很陌生,不知道如何分离各个字节。
你需要一点缓冲。
因为你当时写的是8位,所以你必须
具有至少可以容纳至少 9+7 位的数据类型。uint16_t
会做,
但我建议使用的尺寸至少与您的本机一样大int
。确保使用无符号类型以避免移位问题。
uint32_t bitBuffer = 0; // Our temporary bit storage
uint32_t count = 0; // Number of bits in buffer
假设我们有单个数据:
uint32_t data9b = 257; // 1 0000 0001
向缓冲区添加位很简单;只需在缓冲区末尾移动位,
并与 OR 结合。
bitBuffer |= (data9b << count); // At first iteration, shift does nothing
count += 9; // Update counter
添加 9 位后,我们可以将 8 位刷新到文件中。
while(count >= 8) {
writeToFile(bitBuffer & 0xFF); // Mask out lowest bits with AND
bitBuffer >>= 8; // Remove written bits
count -= 8; // Fix counter
}
每个周期后,缓冲区中都会留下 0 - 7 位。在所有数据的末尾,如果完成的不是 8 位的倍数,则只需写入剩余的内容bitBuffer
归档。
if(count > 0)
writeToFile(bitBuffer);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)