2010-06-20 34 views
2

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

你知道吗?

+1

加密通常不会使数据变小。你是说压缩? – 2010-06-20 18:36:17

+4

由于鸽子的原理(http://en.wikipedia.org/wiki/Pigeonhole_principle),对于所有琴弦都是不可能的。 – Eilon 2010-06-20 18:40:30

+2

你能告诉我们这些字符串是什么样子吗?他们将包含哪些字符?几个样本应该是好的 – mpen 2010-06-20 18:40:57

回答

0
+3

考虑到GZip需要最小10字节的页眉和8字节的页脚,这种解决方案不适用于50-60个字符的字符串。 – 2010-06-20 18:38:17

+0

我同意大卫...我测试了100个字符,然后结果出来了170个字符.. – Kaan 2010-06-21 15:19:13

5

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

+0

好了,然后,我需要一些测试类:) – Kaan 2010-06-21 15:08:33

+0

@Kaan,我很高兴花几分钟放在一起但是,正如其他人所说的,除非你能提供你正在使用的字符串的一些例子,否则它们将不会有用。 – 2010-06-21 15:22:21

+0

这里是例子:http:// localhost:52294/Default.html?LA = 40,9305222197136&LO = 29,8102416992188&N = t%FCrkiye%20denemE&D = kaan&M = r&Z = 4,谢谢大卫:) – Kaan 2010-06-21 15:46:19

1

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

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

+0

GZip需要最少18个字节的开销,这会在这个规模上丧失其效力。 – 2010-06-20 18:40:06

1

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

+3

散列不是压缩也不是加密 – jdehaan 2010-06-20 18:42:20

+2

考虑到原始问题的含糊性,这可能是最好的答案。 – EricLaw 2010-06-20 19:09:20

0

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

也许smaz对你而言也很有意思。的基本压缩算法

实例:

  • RLE(修改或不)
  • 霍夫曼编码
  • 挖洞轮车变换块密码( “位twiddlers”)的

实例:

  • AES
  • 河豚
  • DES
  • 三重DES
  • Twofish的

你将能够找出使用(以上链接)维基百科是什么fullfills您的需求。

+1

如果输入数据预计会有许多相同数据的内部运行,那么这并不是一个坏建议。典型的文本数据不符合该要求。 – 2010-06-20 18:44:55

1

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

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

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