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

时间:2011-03-01 11:22:20

标签: 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);

但我收到此错误消息:

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

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

谢谢!

4 个答案:

答案 0 :(得分:78)

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

  

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

     
      
  • 签署 opt DecimalNumeral
  •   
  • 签署 opt 0x HexDigits
  •   
  • 签署 opt 0X HexDigits
  •   
  • 签署 opt #HexDigits
  •   
  • 签署 opt 0 OctalDigits
  •   
     

星座:

     
      
  • -
  •   

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

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

<强>输出:

  

23846102773961507302322850521

对于比较,这里是Long.MAX_VALUE

  

9223372036854775807

答案 1 :(得分:40)

使用parseLong:

Long.parseLong(s, 16)

答案 2 :(得分:11)

new BigInteger(string, 16).longValue()

对于someLong的任何值:

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

换句话说,这会将您发送到long的{​​{1}}返回给任何Long.toHexString()值,包括负数。它还将接受大于long的字符串,并以#{1}}的形式静默返回字符串的低64位。如果您需要确保输入符合long,您可以检查字符串长度&lt; = 16(在修剪空格之后)。

答案 3 :(得分:3)

Long.parseLong(s, 16)仅适用于"7fffffffffffffff"。请改用BigInteger

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