我需要将数字数字的20-40个字符大小压缩为6个字符大小的数字.到目前为止,我已经尝试过Huffman和一些Zip算法,但没有得到理想的结果.
有人可以在Java中为这项工作建议任何其他算法/ API吗?
例:
Input: 98765432101234567890
Desired Output: 123456
Run Code Online (Sandbox Code Playgroud)
请注意:我并不是说给定输入的输出必须为12345.我的意思是,如果我指定20个字节的数字,它应该被压缩为6个字节的数字.
用法:将为设备提供压缩数字(最多只能占用6个数字字符).设备会将号码解码回原始号码.
假设/限制:
如果需要,客户端和设备(服务器)可以共享编码/解码数字所需的一些公共属性.
只能向设备发出一个请求,即所有数据都应该在一个请求中提供,而不是大块的小数据包
谢谢.
假设任何数字组合是合法输入,这将是您能得到的最佳结果:
final String s = "98765432101234567890";
for (byte b : new BigInteger('0'+s).toByteArray())
System.out.format("%02x ", b & 0xff);
Run Code Online (Sandbox Code Playgroud)
打印
05 5a a5 4d 36 e2 0c 6a d2
Run Code Online (Sandbox Code Playgroud)
以二进制形式存储数字在理论上是最有效的方式,因为每个位组合都是不同的合法值.
只有在输入中存在更多冗余时,您才可以有其他选项,即对合法数字组合有一些限制.