什么是幕后的方法 - public static long parseLong(String s,int radix)

时间:2011-10-11 17:16:34

标签: java radix

我需要根据包的名称生成一致的唯一Long。我没有在Eclipse中使用“将字符串转换为long”,而是认为我可以通过使用方法public static long parseLong(String s,int radix)在运行时实现相同的任务?

我想我需要使用类似的东西 -
Long.parseLong(“Hazelnut”,36)返回1356099454469L

我从问题中得到了什么 - How to convert String to long in Java?

为什么在转换包含字符的字符串时需要将基数设置为36?

1 个答案:

答案 0 :(得分:5)

好吧,你基本上把它当作36号的数字。所以例如,字符串“012”意味着2 + 1 * 36 + 0 * 36 2 。当你用完数字时,你会去字母 - 所以“ABC”意味着来自'C'的12 + 11 来自'B' * 36 + 10 来自'A' * 36 2

如果你理解十六进制是如何工作的,除了使用拉丁字母表中的所有字符外,它是一样的。

但是对于不在0-9,A-Z,a-z中的任何东西都会失败 - 而且对于相当长的琴弦也会失败; long只有2 63 ,你可以在36号基地合理地快速通过。“Hazelnut12345”失败了,例如。哦,这是不区分大小写的,因此“foo”的值与“FOO”的值相同 - 这是否会使您的唯一性要求失败?

从根本上说,你只能获得2个 64 long值,所以除非你的包名很受限制,否则你不会想出一个独特的映射。