我们非常奇怪的要求将11位十六进制数(范围从(A0000000001〜AFFFFFFFFFF))转换为11位十进制数。十六进制与整数之间应存在1:1映射。有没有办法在Java中做到这一点?
最佳答案
在Java或任何其他语言或系统中,这是不可能的。这是数字和集合论的基本属性。
由于前导0xA
不变,因此您实际拥有的是10进制数字值或40位数据值。
这包含大约1.1 x 1012个可能的值,因此不可能将其映射到11位十进制数字,根据定义,该十进制数字只有1011个可能的值。
根据评论,我将使其更加明确。以0xA0000000000
开头并将其映射为十进制00000000000
,然后将两者都加1以在两组成员之间建立一对一的对应关系,然后重复:
0xA0000000000 -> 00000000000
0xA0000000001 -> 00000000001
0xA0000000002 -> 00000000002
...
0xA0000000010 -> 00000000016
...
0xA0000000100 -> 00000000256
...
0xA0000001000 -> 00000004096
...
0xA174876E7FF -> 99999999999
...
0xA174876E800 -> oops! overflow! too many digits
换句话说,
0xA0000000000
和0xAFFFFFFFFFF
之间的所有十六进制值的集合的大小大于00000000000
和99999999999
之间的所有十进制值的集合。关于java - 如何在Java中将11位十六进制数字转换为唯一的11位十进制数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45967261/