小字符串的压缩

发布于 2024-10-20 00:24:10 字数 135 浏览 2 评论 0原文

我的字符串中有 0f 340 字节的数据,主要由符号和数字组成,例如“føàA¹º@ςUë5§Ž§” 我想压缩成 250 或更少字节以将其保存在我的 RFID 卡上。 由于该数据与指纹温度有关。我想要无损压缩。 那么我可以用 C# 实现什么算法来压缩它吗?

I have data 0f 340 bytes in string mostly consists of signs and numbers like "føàA¹º@ƒUë5§Ž§"
I want to compress into 250 or less bytes to save it on my RFID card.
As this data is related to finger print temp. I want lossless compression.
So is there any algorithm which i can implement in C# to compress it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

总攻大人 2024-10-27 00:24:10

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

+12939272-23923+927392

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

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

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

If the data is strictly numbers and signs, I highly recommend changing the numbers into int based values. eg:

+12939272-23923+927392

can be compress into 3 piece of 32-bit integers, which is 22 bytes => 16 bytes. Picking the right integer size (whether 32-bit, 24-bit, 16-bit) should help.

If the integer size varies greatly, you could possibly use 8-bit to begin and use the value 255 to specify that the next 8-bit becomes the 8 more significant bits of the integer, making it 15-bit.

alternatively, you could identify the most significant character and assign 0 for it. the second most significant character gets 10, and the third 110. This is a very crude compression, but if you data is very limited, this might just do the job for you.

楠木可依 2024-10-27 00:24:10

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

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

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

Is there any other information you know about your string? For instance does it contain certain characters more often than others? Does it contain all 255 characters or just a subset of them?

If so, huffman encoding may help you, see this or this other link for implementations in C#.

To be honest it just depends on how your input string looks like. What I'd do is try the using rar, zip, 7zip (LZMA) with very small dictionary sizes (otherwise they'll just use up too much space for preprocessed information) and see how big the raw compressed file they produce is (will probably have to use their libraries in order to make them strip headers to conserve space). If any of them produce a file under 250b, then find the c# library for it and there you go.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文