如何写一个比特流

use*_*192 7 c bit-manipulation bitstream

我正在考虑使用C将一些数据写入比特流.有两种方法可以考虑.一种是将可变比特长度符号连接成连续的比特序列,但是以这种方式,我的解码器可能很难将这些符号与该连续比特流分开.另一种方法是为符号分配相同数量的比特,并且以这种方式解码器可以容易地恢复原始数据,但是可能存在比特的浪费,因为符号具有不同的值,这反过来导致比特流中的许多比特零(我猜这个浪费的比特).

任何暗示我应该做什么?

我是编程新手.任何帮助将不胜感激.

Pat*_*ael 4

听起来你试图做一些类似于霍夫曼压缩方案的事情?我只需逐字节(字符)并跟踪读取最后一个符号的字节内的偏移量。

假设你的符号都不会大于 char。它看起来像这样:

struct bitstream {
   char *data;
   int data_size;           // size of 'data' array
   int last_bit_offset;     // last bit in the stream 

   int current_data_offset; // position in 'data', i.e. data[current_data_offset] is current reading/writing byte
   int current_bit_offset;  // which bit we are currently reading/writing
}

char decodeNextSymbol(bitstream *bs) {

}

int encodeNextSymbol(bitstream *bs, char symbol) {

}
Run Code Online (Sandbox Code Playgroud)

例如,decodeNextSymbol 和encodeNextSymbol 的匹配代码必须使用C 按位运算(“&”(按位AND)和“|”(按位OR))。然后我会列出所有符号,从首先匹配最短的符号,然后执行一个匹配最短符号的 while 循环。例如,如果其中一个符号是“101”,那么如果流是“1011101”,它将匹配第一个“101”并继续匹配流“1101”的其余部分您还必须处理符号值从一个字节溢出到下一个字节的情况。