Delta 编码中的压缩比计算

问题描述

我是使用 Delta 编码来压缩 Hex 数据的新手,我在 wiki 中使用了 C 实现,所以如果我的数据是 0xFFFFFFF,0xFFFFFFF,0xFFFFFFFF 编码结果如下: 0xFFFFFFF,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];
    }
} ```
 

解决方法

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

您在评论中的问题“但是 Huffman 或 RLE 可以处理数字格式的十六进制数据吗?”暗示你有些困惑。 delta 编码的结果是二进制数组的内容。 不是二进制数据的十六进制和文本表示。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...