I want to convert a hex string to long in java.
I have tried with general conve开发者_StackOverflow社区rsion.
String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
But I am getting this error message:
java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
Is there any way to convert String to long in java? Or am i trying which is not really possible!!
Thanks!
Long.decode(str)
accepts a variety of formats:
Accepts decimal, hexadecimal, and octal numbers given by the following grammar:
DecodableString:
- Signopt DecimalNumeral
- Signopt 0x HexDigits
- Signopt 0X HexDigits
- Signopt # HexDigits
- Signopt 0 OctalDigits
Sign:
- -
But in your case that won't help, your String is beyond the scope of what long can hold. You need a BigInteger
:
String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);
Output:
23846102773961507302322850521
For Comparison, here's Long.MAX_VALUE
:
9223372036854775807
Use parseLong:
Long.parseLong(s, 16)
new BigInteger(string, 16).longValue()
For any value of someLong:
new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong
In other words, this will return the long
you sent into Long.toHexString()
for any long
value, including negative numbers. It will also accept strings that are bigger than a long
and silently return the lower 64 bits of the string as a long
. You can just check the string length <= 16 (after trimming whitespace) if you need to be sure the input fits in a long
.
Long.parseLong(s, 16)
will only work up to "7fffffffffffffff"
. Use BigInteger
instead:
public static boolean isHex(String hex) {
try {
new BigInteger(hex, 16);
return true;
} catch (NumberFormatException e) {
return false;
}
}
精彩评论