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