我想在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?或者我在尝试哪种情况不太可能!!
谢谢!
答案 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;
}
}