缩小字符串,c#

时间:2010-06-20 18:34:02

标签: c#

我需要一个库/工具/函数,将50-60字符长的字符串压缩为较小的字符串。

你知道吗?

6 个答案:

答案 0 :(得分:5)

这种规模的有效压缩将很困难。您可以考虑Huffman coding。这可能会给你比gzip更小的压缩(因为它会产生二进制代码而不是base-85序列)。

答案 1 :(得分:1)

该框架包括GZipStreamDeflateStream类。但这可能不是你想要的 - 什么输入字符串必须被压缩?仅限ASCII?只有信件?字母数字字符串?完整的Unicode?什么是允许的输出字符串?

从算法的角度来看,如果没有进一步了解可能输入的空间,我建议使用arithmetic coding。与Huffman coding相比,这可能会使压缩大小缩小几个额外的位,因为它不限于每个符号的整数位数 - 这在处理这些小输入时会变得很重要。

答案 2 :(得分:1)

您是否正在考虑加密哈希?例如,可以在输入字符串上使用SHA-1(http://en.wikipedia.org/wiki/SHA-1)来生成20字节的摘要。当然,摘要总是20个字节 - 即使输入字符串短于20个字节。

答案 3 :(得分:1)

如果你的字符串只包含a-z和0-9之间的小写字符,你可以用7位编码。

这会将60个字符串压缩为53个字节。如果你不需要数字,你可以使用6比特,将其减少到45个字节。

因此,选择正确的压缩方法取决于字符串包含的数据。

答案 4 :(得分:0)

答案 5 :(得分:0)

我会使用一些基本的类似RLE或基于共享字典的压缩,然后使用block cipher来保持大小不变​​。

也许smaz对你来说也很有趣。

基本压缩算法示例:

  • RLE
  • (已修改与否)霍夫曼编码
  • Burrows-Wheeler转型

分组密码的示例(“bit twiddlers”):

  • AES
  • 河豚
  • DES
  • Triple DES
  • Twofish的

您可以使用维基百科(上面的链接)找出满足您需求的内容。