0

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

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

我从问题中得到的 -如何在 Java 中将 String 转换为 long?

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

4

1 回答 1

5

好吧,您基本上将其视为以 36 为底的数字。例如,字符串 "012" 表示 2 + 1 * 36 + 0 * 36 2。当你用完数字时,你会去字母 - 所以“ABC”意味着 12 from 'C' + 11 from 'B' * 36 + 10 from 'A' * 36 2

如果您了解十六进制的工作原理,除了使用拉丁字母表中的所有字符外,它是相同的。

它会在 0-9, AZ, az 以外的任何地方失败——而且它也会在相当长的字符串中失败;long最多只能工作到 2 63,您将在 36 基数中相当快地通过。例如,“Hazelnut12345”失败。哦,这是不区分大小写的,所以“foo”的值与“FOO”的值相同——这是否不符合您的唯一性要求?

从根本上讲,您只有 2 64 个 long值可以使用,因此除非您的包名称受到严格限制,否则您不会制定出唯一的映射。

于 2011-10-11T17:20:27.323 回答