如何在java中将hexstring转换为长整型?

我想在java中将hexstring转换为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" 

有什么办法将string转换为长期在Java? 或者我想这是不可能的!

谢谢!

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

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

  • loginselect DecimalNumeral
  • 签字select 0x HexDigits
  • 签署select 0X HexDigits
  • 签署select #HexDigits
  • 签署select 0 OctalDigits

标志:

但在你的情况下,这将无济于事,你的string已经超出了可以容纳的范围。 你需要一个BigInteger

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

输出:

23846102773961507302322850521

对于比较,这里是Long.MAX_VALUE

9223372036854775807

使用parseLong:

 Long.parseLong(s, 16) 
 new BigInteger(string, 16).longValue() 

对于someLong的任何价值:

 new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong 

换句话说,这将返回你发送到Long.toHexString()long Long.toHexString()值,包括负数。 它也会接受longstring,然后静默地返回string的低64位。 你可以检查string长度<= 16(修剪空白后),如果你需要确保input适合long

Long.parseLong(s, 16)只能工作到"7fffffffffffffff" 。 改用BigInteger

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