0

我有340字节的字符串数据,主要由符号和数字组成,如“föáA¹º@ƒUö5§Ɠ§”我想压缩成250字节或更少的字节来保存在我的RFID卡上。由于此数据与指纹温度有关。我希望无损压缩。那么有什么算法可以用C#实现来压缩它吗?

2
  • 4
    你试过基本的哈夫曼压缩吗?en.wikipedia.org/wiki/Huffman编码。不过,解压缩表的空间需求可能会超过任何节省的空间。
    – 马克·B
    评论 2011年3月2日3:50
  • 压缩算法没有一个可以让你说“我想要”的旋钮许多字节”。如果存在,当然每个人都会将其设置为“1字节”。像这样压缩少量字节是相当困难的。更重要的是,这是毫无意义的。 评论 2011年3月2日6:02

2个答案2

重置为默认值
1

如果数据严格是数字和符号,我强烈建议将数字更改为基于int的值。如:

+12939272-23923+927392

可以压缩为3个32位整数,即22个字节=>16个字节。选择正确的整数大小(无论是32位、24位还是16位)都会有所帮助。

如果整数大小变化很大,您可以使用8位开始,并使用值255指定下一个8位成为整数的8个更重要的位,使其成为15位。

或者,您可以确定最重要的字符并为其赋值0。第二个最重要字符得到10,第三个得到110。这是一个非常粗糙的压缩,但如果您的数据非常有限,这可能正好适合您。

0

关于你的字符串还有其他信息吗?例如,它是否比其他字符更经常包含某些字符?它包含所有255个字符还是仅包含其中的一个子集?

如果是这样,哈夫曼编码可能会对您有所帮助,请参阅这个其他链接用于C#中的实现。

老实说,这取决于输入字符串的外观。我要做的是尝试使用rar、zip、7zip(LZMA)字典尺寸很小(否则,它们只会为预处理信息占用太多空间),并查看它们生成的原始压缩文件有多大(可能必须使用它们的库才能使它们剥离标头以节省空间)。如果它们中的任何一个产生了一个250b以下的文件,那么找到它的c#库就可以了。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.