I have a file with HEX data I want to convert it into SIGNED DECIMAL using python.
int('0xffd2',16)
is not the solution since it converts the HEX to unsigned DEC. Any idea how to do it?
0xffd2, 65490
0xffcb, 65483
0xffcb, 65483
0xffcc, 65484
0x10, 16
0xc, 12
0xd, 13
0x0, 0
0xfffe, 65534
You can interpret the bytes as a two's complement signed integer using bitwise operations. For example, for a 16-bit number:
Therefore:
This can be extended to any bit-length string, by setting the masks so the first mask matches the most-significant bit (
0x8000 == 1 << 15 == 0b1000000000000000
) and the second mask matches the all the remaining bits (0x7fff == (1 << 15) - 1 == 0b0111111111111111
).Once you have the unsigned value, it's very easy to convert to signed.
This is for a 16-bit number. For a 32-bit number just add 4 zeros to each of the magic constants. Those constants can also be calculated as
1 << (bits - 1)
and1 << bits
.