C# 小串压缩

C# 小串压缩,c#,compression,C#,Compression,我有340字节的字符串数据,大部分由符号和数字组成,如“føAªº@UƒUë5§” 我想压缩成250或更少的字节来保存在我的RFID卡上。 因为这些数据与指纹温度有关。我想要无损压缩。 那么,有没有什么算法可以用C#实现来压缩它呢?您还知道关于字符串的其他信息吗?例如,它是否比其他字符更经常地包含某些字符?它是包含所有255个字符还是仅包含其中的一个子集 如果是这样,哈夫曼编码可能会对您有所帮助,请参阅或了解C#中的实现 老实说,这取决于输入字符串的外观。我要做的是尝试使用rar、zip、7zi

我有340字节的字符串数据,大部分由符号和数字组成,如“føAªº@UƒUë5§” 我想压缩成250或更少的字节来保存在我的RFID卡上。 因为这些数据与指纹温度有关。我想要无损压缩。
那么,有没有什么算法可以用C#实现来压缩它呢?

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

如果是这样,哈夫曼编码可能会对您有所帮助,请参阅或了解C#中的实现


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

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

+12939272-23923+927392

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

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


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

您尝试过基本的哈夫曼压缩吗。不过,解压表所需的空间可能会超过任何节省的空间。压缩算法没有一个旋钮可以让你说“我想要这么多字节”。如果存在,那么当然每个人都会将其设置为“1字节”。像这样压缩少量字节是相当困难的。更重要的是,这是毫无意义的。