我需要根据包的名称生成一致的唯一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?
答案 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
值,所以除非你的包名很受限制,否则你不会想出一个独特的映射。