How to convert 11 digit hexadecimal number to unique 11 digit decimal number in Java?
我们有一个非常奇怪的要求,将 11 位十六进制数(范围从 (A0000000001 ~ AFFFFFFFFFF) )转换为 11 位十进制数。十六进制到整数之间应该有 1:1 的映射。有没有办法在 Java 中做到这一点?
这是不可能的,在 Java 或任何其他语言或系统中都是不可能的。这种不可能性是数字和集合论的基本属性。
由于前导
这包含大约 1.1 x 1012 个可能的值,因此无法将其映射到 11 位十进制数,根据定义,它只有 1011 个可能的值。
根据评论,我将更明确地说明这一点。从
1 2 3 4 5 6 7 8 9 10 11 12 13 | 0xA0000000000 -> 00000000000 0xA0000000001 -> 00000000001 0xA0000000002 -> 00000000002 ... 0xA0000000010 -> 00000000016 ... 0xA0000000100 -> 00000000256 ... 0xA0000001000 -> 00000004096 ... 0xA174876E7FF -> 99999999999 ... 0xA174876E800 -> oops! overflow! too many digits |
换句话说,
不确定是否需要显示十个字符。如果是这样,这里有一些代码可以将其转换为字符串并填充前导零。
1 2 3 4 5 6 7 8 9 10 11 12 13 | String decNumber = Integer.toString(decimal); public static String padLeadingZeros(String data, int requiredLength){ StringBuffer sb = new StringBuffer(); int numLeadingZeros = requiredLength - data.length(); for (int i=0; i < numLeadingZeros; i++){ sb.append("0"); } sb.append(data); return sb.toString(); } |