我希望这个问题不会产生一些模糊性。实际上我正在研究RFID项目,我正在使用被动标签。这些标签仅存储4个字节的数据,32位。我正在尝试在Tag的数据库中的String中存储更多信息。我在互联网上搜索了字符串压缩算法,但我没有找到任何合适的算法。有人请指导我完成这个问题。如何在这个4字节数据库中保存更多数据,如果我使用其他策略进行存储,如果是,那么什么?而且,我在手持窗口CE设备上使用C#。
如果有人可以帮助我,我会很感激......
答案 0 :(得分:1)
这取决于您的标签,例如外星人标签http://www.alientechnology.com/docs/products/Alien-Technology-Higgs-3-ALN-9662-Short.pdf,有EPC内存,我认为您使用的是EPC内存,但您也可以在标签中使用用户内存。您无需压缩任何内容,只需使用您的用户内存即可。此外,从技术上讲,我宁愿不在我的标签上保存许多数据,我在32位上使用自己的编码并将其与我的软件上的更多数据相关联(映射),并将我的数据保存在我的硬盘上。它也更安全。
答案 1 :(得分:0)
压缩方案无法保证如此高的压缩比。
我能想到32位的唯一方法是在32位中存储int
,并构造一个本地/远程URL ,指向实际数据。
您还可以将stored value
指向设备上本地查找表中的条目。
答案 2 :(得分:0)
显然没有压缩可以将任意16字节值减少到4字节值。这在数学上是不可能的,请查看Pidgeonhole principle了解详细信息。
将实际数据存储在某种数据库中。将4个字节编码为整数,该整数充当您想要引用的行的键。例如,通过使用自动增量主键或数组中的索引。适用于多达40亿行。
答案 3 :(得分:0)
如果您的字符串少于2 ^ 32,只需枚举它们,然后将字符串索引(在“字典”中)保存在4字节“数据库”中。
答案 4 :(得分:0)
除非你对字符串的格式有很多了解,否则不可能这样做。从pigeonhole principle可以看出这一点:你有一个理论上2 ^ 128个不同的16字节字符串,但只有2 ^ 32个不同的值可供选择。
换句话说,没有压缩算法可以保证可能的输入集中的任意字符串将映射到输出集中的4字节值。
可能会设计一个算法,该算法将在您的特定情况中运行,但除非您的数据集受到足够的限制(最多只有79,228,162,514,264,337,593,543,950,336可能的字符串可能有效)和具有有意义的结构,那么您唯一的选择就是在外部存储一些映射。