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

2022-08-31 17:44:25

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

我尝试过一般转换。

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

但是我收到此错误消息:

java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"

有没有办法在java中将字符串转换为长整型?还是我在尝试这是不可能的!

谢谢!


答案 1

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

接受由以下语法给出的十进制、十六进制和八进制数:
可解码字符串:

  • 符号opt decimalNumeral
  • 签名选择 0x 十六进制数字
  • 签名选择 0X 十六进制数字
  • 符号选项 # 十六进制数字
  • 签名选择 0 八进制数字

标志:

  • -

但是在你的情况下,这无济于事,你的String超出了可以容纳的时间范围。你需要一个大Integer

String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);

输出:

23846102773961507302322850521

为了进行比较,这里是Long.MAX_VALUE

9223372036854775807


答案 2

使用解析龙:

Long.parseLong(s, 16)