Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

2's complement hex number to decimal in java

I have a hex string that represents a 2's complement number. Is there an easy way (libraries/functions) to translate the hex into a decimal without working directly with its bits??

E.G. This is the expected output given the hex on the left:

"0000" => 0
"7FFF" => 32767 (max positive number)
"8000" => -32768 (max negative number)
"FFFF" => -1

Thanks!

like image 946
Marsellus Wallace Avatar asked Jul 14 '11 20:07

Marsellus Wallace


People also ask

How do you convert hex to 2's complement?

To find hexadecimal 2's complement:Subtract the number from FFFFFFFF. Add 1.

What is Hex signed 2's complement?

Two's complement is an agreement how to represent signed integral numbers in e.g. 16 bits (in olden times, different representations have been used by various processors, e.g. one's complement or sign-magnitude). Positive numbers and zero are represented as expected: 0 is 0000 0000 0000 0000 or hex 0000.

What is 2's complement in Java?

To get 2's complement of binary number is 1's complement of given number plus 1 to the least significant bit (LSB). For example 2's complement of binary number 10010 is (01101) + 1 = 01110.

Does Java support hexadecimal?

In Java programs, hexadecimal numbers are written by placing 0x before numbers.


1 Answers

This seems to trick java into converting the number without forcing a positive result:

Integer.valueOf("FFFF",16).shortValue(); // evaluates to -1 (short)

Of course this sort of thing only works for 8, 16, 32, and 64-bit 2's complement:

Short.valueOf("FF",16).byteValue(); // -1 (byte)
Integer.valueOf("FFFF",16).shortValue(); // -1 (short)
Long.valueOf("FFFFFFFF",16).intValue(); // -1 (int)
new BigInteger("FFFFFFFFFFFFFFFF",16).longValue(); // -1 (long)

Example here.

like image 169
trutheality Avatar answered Sep 17 '22 12:09

trutheality