我正在开发一段代码以从输入字符串生成唯一的十六进制值。输出大小必须小于11个字节,这是要求。有人请给我一个洞察力。我已经完成了字符串到二进制的转换,然后是六边形映射,它产生了一个字母数字字符的组合,但是大小总是大于11个字节。我还需要从这个唯一的id重新生成输入......这是可能的......
谢谢你
答案 0 :(得分:1)
如果您的结果必须绝对唯一和,您的输入可以是任意长度,那么您的任务就无法完成。
可以这样想:11个字节有多少种不同的组合? 256 11 (或2 11 * 8 = 2 88 )。
这是一个很大的数字,对吗?是的,但它还不够大。
为了简单起见,我们只讨论ASCII字符串,因此我们有128个不同的值(实际上Java String
中的字符有更多可能性,但原则保持不变。对于简单性我们也忽略了\0
中的String
字符不太可能。)
现在,有128个 13 不同的13个字符的ASCII字符串。这是2 7 * 13 或2 91 的不同组合。显然,对于2 91 不同的字符串,你不能拥有2个 88 可能的id中的唯一id。
答案 1 :(得分:0)
少于11个字节表示最多10个字节。
<击> 8 ^ 10是1073741824。 击> 2 ^ 80是一个巨大的数字。
因此,如果您使用十六进制值并将其取模为该数字,则应该适合10个字节。将余数转换回十六进制。
无法重新生成输入。如果允许输入超过11个字节,则无法进行。那将是无休止的压缩。