How to convert a hexadecimal string to long in java?

JavaParsingHexLong Integer

Java Problem Overview


I want to convert a hex string to long in java.

I have tried with general conversion.

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!

Java Solutions


Solution 1 - Java

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][3]:

> 9223372036854775807

[3]: http://download.oracle.com/javase/6/docs/api/java/lang/Long.html#MAX_VALUE "A constant holding the maximum value a long can have, 2^63-1."

Solution 2 - Java

Use parseLong:

Long.parseLong(s, 16)

Solution 3 - Java

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.

Solution 4 - Java

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;
    }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser405398View Question on Stackoverflow
Solution 1 - JavaSean Patrick FloydView Answer on Stackoverflow
Solution 2 - JavaErikView Answer on Stackoverflow
Solution 3 - JavaBobbyView Answer on Stackoverflow
Solution 4 - JavaquezacoatlView Answer on Stackoverflow