将位流添加到缓冲区BYTE并写入二进制文件-C

时间:2017-06-13 10:16:22

标签: c binary

我正在尝试将数字转换为二进制,然后将二进制数转换为二进制文件。 假设所有数字都是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转换为文件 但我无法写出来。谢谢你的帮助

2 个答案:

答案 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