Java - parse and unsigned hex string into a signed long

Peter picture Peter · Apr 20, 2011 · Viewed 11.7k times · Source

I have a bunch of hex strings, one of them, for example is:

  d1bc4f7154ac9edb

which is the hex value of "-3333702275990511909". This is the same hex you get if you do Long.toHexString("d1bc4f7154ac9edb");

For now, let's just assume I only have access to the hex string values and that is it. Doing this:

  Long.parseLong(hexstring, 16);

Doesn't work because it converts it to a different value that is too large for a Long. Is there away to convert these unsigned hex values into signed longs?

Thanks!

Answer

WhiteFang34 picture WhiteFang34 · Apr 20, 2011

You can use BigInteger to parse it and get back a long:

long value = new BigInteger("d1bc4f7154ac9edb", 16).longValue();
System.out.println(value); // this outputs -3333702275990511909