【问题标题】:Converting a hex (two's complement) to Java value将十六进制(二进制补码)转换为 Java 值
【发布时间】:2014-05-08 17:14:01
【问题描述】:

我有这个十六进制值:C9E5249A,它代表有符号的 32 位二进制补码 C 中的整数表示。 我怎样才能得到它的 Java 对应物?

【问题讨论】:

  • 你有一个十六进制值,还是有一堆 1 和 0?
  • C9E5249A 的实际十六进制值。
  • 从这个十六进制值得到的 C 中的数值是多少?
  • 这和C一点关系都没有。即使你这么认为。
  • 我找到了这个站点:rapidtables.com/convert/number/hex-to-decimal.htm,对于输入 C9E5249A 给出 Hex = C9E5249A Decimal= 12×16⁷+9×16⁶+14×16⁵+5×16⁴+2×16³+4×16² +9×16¹+10×16⁰ = 3387237530 有符号十进制 = -907729766 二进制 = 11001001111001010010010010011010 我现在的问题是......我怎样才能得到那个有符号十进制?

标签: java integer twos-complement


【解决方案1】:

试试这个

Long.parseLong("C9E5249A", 16);

C9E5249A 对于 Integer.parseInt 来说太大了,它将字符串解析为有符号十进制整数,请参阅 API

【讨论】:

    【解决方案2】:

    你可以这样称呼:

    Integer.parseInt("C9E5249A", 16)

    其实……

    Long.parseLong("C9E5249A", 16)

    (因为正如其他人指出的那样,您拥有的这个十六进制值对于 int 类型来说太大了)。

    【讨论】:

    • 我试过了......它给了我这个:线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:java.lang.NumberFormatException.forInputString(NumberFormatException.java的“C9E5249A”) :65) 在 java.lang.Integer.parseInt(Integer.java:495) 在 HelloWorld.main(HelloWorld.java:4)
    • 提到 2 的补码让我相信他可能真的有 1 和 0,而不是 Java 程序中的实际十六进制值。
    • @Sergiu 因为十六进制值表示的“整数”无法放入整数。你可以试试Long.parseLong(hex, 16),但我不确定你真正想要实现什么。
    • @Sergiu 然后以同样的方式调用 Long.parseLong。
    • 我必须解析一些原始数据......我得到的文档是为 C 程序员编写的,我必须用 Java 编写程序。 Long.parseLong(hex, 16) 可以工作,但不会产生正确的值......在我的例子中,这应该是一个负值。
    猜你喜欢
    • 2014-03-01
    • 2014-04-16
    • 2013-09-28
    • 2021-12-03
    • 2011-09-03
    • 2012-06-26
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多