问题描述
我是使用 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 编码的结果是二进制数组的内容。 不是二进制数据的十六进制和文本表示。