0

我是新来使用 Delta 编码来压缩 Hex 数据,我在wiki中使用了 C 实现,所以如果我的数据像 0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF 编码结果将如下:0xFFFFFFF,0x0000000,0x0000000,0x0000000 ,0x0000000 ,与其他无损算法的压缩率=原始大小/压缩大小不同,我发现数据的大小将像压缩前一样固定,那么我如何计算增量编码中的压缩率?以及如何压缩冗余增量?代码是:

{
    unsigned char last = 0;
    for (int i = 0; i < length; i++)
    {
        unsigned char current = buffer[i];
        buffer[i] = current - last;
        last = current;
    }
}

void delta_decode(unsigned char *buffer, int length)
{
    unsigned char last = 0;
    for (int i = 0; i < length; i++)
    {
        unsigned char delta = buffer[i];
        buffer[i] = delta + last;
        last = buffer[i];
    }
} ```
 
4

1 回答 1

2

Delta 编码是压缩之前的一个步骤,它本身不会压缩。它启用后续压缩。然后,您应该获取 delta 编码的结果并将其提供给标准无损压缩器,以查看它压缩了多少。

您在评论中的问题“但是 Huffman 或 RLE 是否可以使用数字格式的十六进制数据?” 暗示了你的一些困惑。增量编码的结果是二进制数组的内容。不是该二进制数据的十六进制和文本表示。

于 2021-07-08T16:43:10.730 回答