Bootstrap

java 表示无符号long,Java - 解析并将无符号十六进制字符串解析为带符号的long

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!

解决方案

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

;