我在处理时间序列数据。
在每个样本定时,我得到一个样本,并且这个值的大小不是全字节的。
例如,如果示例是7位的数据,那么它只使用一个字节上的7位。
第一个样本=0b01001000,第二个样本=0b01100010,等等…
原,0100 1000 0110 0010
但我想得到10 0100 0110 0010
如何将此压缩方法应用于编码和解码?
有没有使用这种方法的官方压缩理论?
发布于 2022-05-19 14:25:37
使用位操作一次将7位写入一个以两个变量保存的位的缓冲区,并在积累它们时写出字节。最后,您仍然需要写出完整的字节,所以最后一个字节可能有一些未使用的位。解码一次从比特流中读取七位,使用相同的方法。
编码( C):
unsigned buf = 0, bits = 0;
for (int i = 0; i < sample_count; i++) {
buf |= sample[i] << bits;
bits += 7;
if (bits >= 8) {
putchar(buf & 0xff);
buf >>= 8;
bits -= 8;
}
}
if (bits > 0)
putchar(buf);解码(说明您如何知道如何制作sample[]):
unsigned buf = 0, bits = 0, n = 0;
for (;;) {
int ch = getchar();
if (ch == EOF)
break;
buf |= ch << bits;
bits += 8;
do {
sample[n++] = buf & 0x7f;
buf >>= 7;
bits -= 7;
} while (bits >= 7);
}https://stackoverflow.com/questions/72302611
复制相似问题