gpt4 book ai didi

java - 如何在 Java 中解析十六进制的负长整型

转载 作者:搜寻专家 更新时间:2023-10-30 21:16:54 25 4
gpt4 key购买 nike

我们有一个需要读取十六进制数的 J2ME 应用程序。该应用程序对于某些手机来说已经太大了,因此我们尽量不包含任何其他编解码器或编写我们自己的函数来执行此操作。

所有数字都是十六进制的 64 位有符号整数,当我们使用 Long.ParseLong(hex, 16) 时,它可以正确处理正数,但对负数会抛出异常,

    long l = Long.parseLong("FFFFFFFFFFFFFFFF", 16);

我们如何使用 Java 本身提供的类从该十六进制字符串中获取 -1?

有些人可能会建议我们应该按照 Java 的预期将十六进制写为 -1。抱歉,格式由协议(protocol)固定,我们无法更改。

最佳答案

你的问题是parseLong()不处理二进制补码 - 它期望符号以“-”的形式出现。

如果你正在为 CDC 配置文件开发,你可以简单地使用

long l = new BigInteger("FFFFFFFFFFFFFFFF", 16).longValue()

但是 CLDC 配置文件没有那个类。在那里,做你需要做的最简单的方法可能是把长的分开,把它分成两半,然后重新组合它们。这有效:

long msb = Long.parseLong("FFFFFFFF", 16);
long lsb = Long.parseLong("FFFFFFFF", 16);
long result = msb<<32 | lsb;

更新

从 Java 8 开始,您可以使用 parseUnsignedLong() :

long l = Long.parseUnsignedLong("FFFFFFFFFFFFFFFF", 16);

关于java - 如何在 Java 中解析十六进制的负长整型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com