我目前正在为 Windows Mobile 编写一个应用程序,它需要能够从一维条形码(配置设置)中获取键值对。需要扫描的条形码越少越好。输入示例:
------------------------------
| Key | Value |
------------------------------
| 12 | Söme UTF-8 Strîng |
| 9 | & another string |
------------------------------
我想到了以下算法:
<强>1。连接键值对并使用 Base64 编码值
所以我们会得到类似 12=U8O2bWUgVVRGLTggU3Ryw65uZw==&9=JiBhbm90aGVyIHN0cmluZw==
<强>2。使用Huffman编码来压缩数据
为此,我将使用固定的霍夫曼树,并提供以下信息来帮助我压缩数据:
-------------------------------------------
| Enties | Priority |
-------------------------------------------
| =, & | High |
| 0-9 | Medium |
| 5-bit Base64 Words (w/o 0-9) | Low |
-------------------------------------------
<强>3。从编码数据生成 Code 128B 条形码
将 Base96 编码应用于 Huffman 算法生成的比特流,以获得可在 Code 128B 条形码中使用的 ASCII 字符。根据需要将生成的字符串拆分为多个条形码。
编写这些步骤对我来说不是问题,但我想获得一些有关算法效率和设计的反馈。
问题
- 我是否在某处失去了更好的压缩/更短的字符串的潜力?
- 是否有更好的方法来压缩随机 UTF8 编码数据?
- 我应该将动态霍夫曼表嵌入到编码数据中吗?
- 如何考虑 Code 128B 的压缩(
0
比&
需要的空间更少)?
最佳答案
一种简单的方法是定义直接映射到 code128 的所有 64 个字符。这将留下 30-40 个可用的代码 128 插槽。在剩余的槽中定义一些双字符。 == =& 0= 1= 2= 3= 4= 5= 6= 7= 8= 9= &0 &1 &2 &2 &5 &5 &6 &7 &8 &9 (重复最后一个字符)= =(双下一个字符) &(双下一个字符)
关于compression - 高效压缩和表示从一维条形码读取的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269408/