在C中压缩ASCII字符串

Nic*_*ckB 11 c compression

我有一些C代码在内存中存储ASCII字符串作为四字节长度后跟字符串.字符串长度在10-250字节范围内.

为了减少占用,我想在运行中单独压缩每个字符串,仍然存储(压缩字符串的)长度,然后是压缩字符串.

我不想在比单个字符串更大的范围内压缩,因为任何字符串都可以随时读/写.

有哪些库/算法可用于此目的?

谢谢你的帮助.NickB

sha*_*oth 14

ZLib始终为您服务 - 当字符串包含不可压缩的数据时,它的开销非常小,它相对快速,免费且可以轻松集成到C和C++程序中.


Dav*_*ary 10

对于短字符串,大多数压缩算法都不能很好地工作.以下是一些压缩算法,旨在压缩简短的英文文本字符串.虽然它们可以处理明文字符串中的任意字节,但这些字节通常会使"压缩"数据比明文更长.所以压缩器不加改变地存储"不可压缩"数据并在这些数据上设置"文字"标志是个好主意(正如Steve Jessop建议的那样).

  • "base 40 encoding":最大压缩3:2
  • "Zork标准信息交换规范"(ZSCII):最大压缩3:2
  • 字节对压缩:最大压缩2:1
  • 所有字符串共享的静态Huffman表(由cygil建议).
    • 理想情况下,由您所有实际数据的确切字符频率组成.
    • Varicode:最大压缩比为2:1
  • PalmDoc压缩(字节对压缩+ LZ77的简单变体).