如何在java中将十六进制字符串转换为long?

43 java parsing hex long-integer

我想在java中将十六进制字符串转换为long.

我尝试过一般转换.

String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
Run Code Online (Sandbox Code Playgroud)

有没有办法在Java中将String转换为long?或者我在尝试哪种不可能!

谢谢!

Sea*_*oyd 82

Long.decode(str) 接受各种格式:

接受以下语法给出的十进制,十六进制和八进制数:
DecodableString:

  • 签署opt DecimalNumeral
  • 登录选择 0X HexDigits
  • 签署选择 0X HexDigits
  • 签署opt#HexDigits
  • 签署选择 0 OctalDigits

标志:

  • -

但是在你无法帮助的情况下,你的String超出了长期可以容纳的范围.你需要一个BigInteger:

String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);
Run Code Online (Sandbox Code Playgroud)

输出:

23846102773961507302322850521

对于比较,这里是Long.MAX_VALUE:

9223372036854775807

  • 对象的@JECarterII println调用该对象的toString()方法 (2认同)

Eri*_*rik 41

使用parseLong:

Long.parseLong(s, 16)
Run Code Online (Sandbox Code Playgroud)

  • 一般来说是真的,但在这种情况下失败(数字对于Long来说太大了) (4认同)

小智 11

new BigInteger(string, 16).longValue()
Run Code Online (Sandbox Code Playgroud)

对于someLong的任何值:

new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong
Run Code Online (Sandbox Code Playgroud)

换句话说,这将返回long您发送Long.toHexString()的任何long值,包括负数.它还将接受大于a的字符串long并以静默方式返回字符串的低64位作为a long.你可以检查字符串长度<= 16(在修剪空格之后),如果你需要确保输入符合a long.


小智 6

Long.parseLong(s, 16)只会工作到"7fffffffffffffff". 使用BigInteger来代替:

public static boolean isHex(String hex) {
    try {
        new BigInteger(hex, 16);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)