我正在尝试将数字转换为二进制,然后将二进制数转换为二进制文件。 假设所有数字都是7位数(int数<127)。 所以最后,文件将包含7位块的数字
我知道每个BYTE是8位,我不能把每个数字写成1个BYTE,但需要使用整个BYTE(即一些数字将在2个不同的BYTES中)
if:120 = 1111000 | 7 = 0000111 | 64 = 1000000
所以比特流是111100000001111000000,应该写成
1111000|0 000111|10 00000|00
1BYTE 2BYTE 3BYTE
我想用缓冲区 将8位移位到缓冲区,然后使用指针将fwrite转换为文件 但我无法写出来。谢谢你的帮助
答案 0 :(得分:1)
首先,处理位时使用无符号整数
unsigned char a = 0;
char bits[] = "1111000";
char *p = bits;
while (*p) {
a <<= 1; // shift left
a |= (*p == '1'); // add bit
p++; // next bit
}
答案 1 :(得分:0)
因此,您希望将8个7位值放在7个8位位置
[-val-][-val-][-val-]...
00000001111111222222233333334444444555555566666667777777
[-loc8-][-loc8-][-loc8-]...
只需映射位并完成
例如,第3个7位值(假设int val7[8]
)可以写入8位位置(假设为int loc8[7]
)
loc8[1] &= 0xfc; // clear 2 bits
loc8[1] |= (val7[2] & 0x60) >> 5; // set 2 bits
loc8[2] &= 0x7; // clear 5 bits
loc8[2] |= (val7[2] & 0x1f) << 3; // set 5 bits