hex to signed integer

Tim Roberts timr at probo.com
Thu Jul 17 05:42:56 CEST 2003


Tom Goulet <tomg at em.ca> wrote:

>Hello,
>
>My question basically is:  What is the opposite of the following?
>| "%08X" % -1
>
>I want to convert a string of hexadecimal characters to the signed
>integer they would have been before the <print> statement converted
>them.  How do I do this in such a way that is compatible with Python
>versions 1.5.2 through 2.4, and not machine-dependent?
>
>This is my current best:
>| struct.unpack("!l", \
>| 	chr(string.atoi(hexbit[0:2], 16)) + \
>| 	chr(string.atoi(hexbit[2:4], 16)) + \
>| 	chr(string.atoi(hexbit[4:6], 16)) + \
>| 	chr(string.atoi(hexbit[6:8], 16)))

(Unrelated note: the blackslashes are unnecessary in this example, since it
is inside a set of parens.)

How slimy is this?

  try:
    temp = int(hexbit,16)
  except:
    temp = int(long(hexbit,16)-2**32)

Equivalently:
  if hexbit[0] < '8':
    temp = int(hexbit,16)
  else:
    temp = int(long(hexbit,16)-2**32)
-- 
- Tim Roberts, timr at probo.com
  Providenza & Boekelheide, Inc.




More information about the Python-list mailing list