如何在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()
值,包括负数。 它也会接受long
string,然后静默地返回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; } }