how to convert negative integer value to hex in python how to convert negative integer value to hex in python python python

how to convert negative integer value to hex in python


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:

0xfffffffff418c5c1L0xbe73a3fL


Because Python integers are arbitrarily large, you have to mask the values to limit conversion to the number of bits you want for your 2s complement representation.

>>> hex(-199703103 & (2**32-1)) # 32-bit'0xf418c5c1L'>>> hex(-199703103 & (2**64-1)) # 64-bit'0xfffffffff418c5c1L'

Python displays the simple case of hex(-199703103) as a negative hex value (-0xbe73a3f) because the 2s complement representation would have an infinite number of Fs in front of it for an arbitrary precision number. The mask value (2**32-1 == 0xFFFFFFFF) limits this:

FFF...FFFFFFFFFFFFFFFFFFFFFFFFF418c5c1&                             FFFFFFFF--------------------------------------                              F418c5c1


Adding to Marks answer, if you want a different output format, use

'{:X}'.format(-199703103 & (2**32-1))