how to convert negative integer value to hex in python

nic nic picture nic nic · Oct 19, 2011 · Viewed 33.5k times · Source

I use python 2.6

>>> hex(-199703103)
'-0xbe73a3f'

>>> hex(199703103)
'0xbe73a3f'

Positive and negative value are the same?

When I use calc, the value is FFFFFFFFF418C5C1.

Answer

NPE picture NPE · Oct 19, 2011

Python's integers can grow arbitrarily large. In order to compute the raw two's-complement the way you want it, you would need to specify the desired bit width. Your example shows -199703103 in 64-bit two's complement, but it just as well could have been 32-bit or 128-bit, resulting in a different number of 0xf's at the start.

hex() doesn't do that. I suggest the following as an alternative:

def tohex(val, nbits):
  return hex((val + (1 << nbits)) % (1 << nbits))

print tohex(-199703103, 64)
print tohex(199703103, 64)

This prints out:

0xfffffffff418c5c1L
0xbe73a3fL