算法 | byte值的按位不定长存储算法 [C/C++]

问题背景
首先,在基于动态规划的灰度图像压缩算法中,压缩前灰度值序列的每个值原本以8bit,即1byte进行存储,压缩后,灰度值序列分为n个段,每个段中的每个元素都不一定以8bit存储,具体存储位数存放在一个大小为n的byte数组中。我们称这为不定长存储。

其次,我们知道在计算机中一般为按字节编址和存储,在Python、C/C++等编程语言中主要提供的读写的最小单位也是字节,而不是比特。但要实现灰度值序列的不定长存储,按比特读写是更方便的。

info:在实际使用时,请注意考虑大小端存储的问题。

解决问题:现有一个byte值序列data[data_size],和另外一个byte值序列B[data_size]。其中第i个元素B[i],表示data[i]将以B[i]个bit存储。例如B[i]=3表示data[i]希望以3个bit存储。

输出结果

将12个值不定长存入byte数组(buffer)将12个值不定长存入byte数组(buffer)

输入输出原理解释输入输出原理解释