【问题标题】:Whats going on behind the scenes with method - public static long parseLong(String s,int radix)使用方法在幕后发生了什么 - public static long parseLong(String s,int radix)
【发布时间】:2011-12-05 12:07:06
【问题描述】:

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

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

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

为什么在转换包含字符的String时需要将radix设置为36?

【问题讨论】:

    标签: java radix


    【解决方案1】:

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

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

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

    基本上,您只有 264long 值可以使用,因此除非您的包名称受到严格限制,否则您将无法计算出唯一的映射。

    【讨论】:

    • 我可以将十进制数/二进制数转换为十六进制数,但在字符串方面我有点困惑。你工作得怎么样 - 字符串 "012" 的意思是 2 + 1 * 36 + 0 * 36(squared) ?它不需要区分大小写。
    • @user470184:想一想如果“012”以 10 为底意味着什么 - 这意味着 2 + 1 * 10 + 0 *(10 平方)。现在取 10,记住你要求它使用基数 36...你会看到我从哪里得到这些数字的。
    • 以 10 为底的“012”不只是 12 吗?
    • @user470184:是的,因为 2 + 1*10 + 0*100 12。
    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 2010-09-29
    • 2014-05-26
    • 2023-02-22
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    相关资源
    最近更新 更多