首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过消除无意义位来压缩数据的方法

通过消除无意义位来压缩数据的方法
EN

Stack Overflow用户
提问于 2022-05-19 10:05:46
回答 1查看 93关注 0票数 1

我在处理时间序列数据。

在每个样本定时,我得到一个样本,并且这个值的大小不是全字节的。

例如,如果示例是7位的数据,那么它只使用一个字节上的7位。

第一个样本=0b01001000,第二个样本=0b01100010,等等…

原,0100 1000 0110 0010

但我想得到10 0100 0110 0010

如何将此压缩方法应用于编码和解码?

有没有使用这种方法的官方压缩理论?

EN

回答 1

Stack Overflow用户

发布于 2022-05-19 14:25:37

使用位操作一次将7位写入一个以两个变量保存的位的缓冲区,并在积累它们时写出字节。最后,您仍然需要写出完整的字节,所以最后一个字节可能有一些未使用的位。解码一次从比特流中读取七位,使用相同的方法。

编码( C):

代码语言:javascript
复制
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[]):

代码语言:javascript
复制
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);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72302611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档