Java - 解析和无符号十六进制字符串为有符号长字符串

2022-09-02 20:09:36

我有一堆十六进制字符串,例如其中之一是:

  d1bc4f7154ac9edb

这是“-3333702275990511909”的十六进制值。这与你做Long.toHexString(“d1bc4f7154ac9edb”)得到的十六进制相同;

现在,让我们假设我只能访问十六进制字符串值,仅此而已。这样做:

  Long.parseLong(hexstring, 16);

不起作用,因为它将其转换为对于 Long 而言太大的其他值。是否有将这些无符号十六进制值转换为有符号多头?

谢谢!


答案 1

您可以使用BigInteger来解析它并返回:long

long value = new BigInteger("d1bc4f7154ac9edb", 16).longValue();
System.out.println(value); // this outputs -3333702275990511909

答案 2

您可以将其分成两半,一次读取32位。然后使用左移位 32 和逻辑或将其恢复为单个长整型。