Saturday, February 5, 2011

How to get hex string from signed integer

Say I have the classic 4-byte signed integer, and I want something like

print hex(-1)

to give me something like

>> 0xffffffff

In reality, the above gives me -0x1. I'm dawdling about in some lower level language, and python commandline is quick n easy.

So.. is there a way to do it?

  • This will do the trick:

    >>> print hex (-1 & 0xffffffff)
    0xffffffffL
    

    or, in function form (and stripping off the trailing "L"):

    >>> def hex2(n):
    ...     return hex (n & 0xffffffff)[:-1]
    ...
    >>> print hex2(-1)
    0xffffffff
    >>> print hex2(17)
    0x11
    

    or, a variant that always returns fixed size (there may well be a better way to do this):

    >>> def hex3(n):
    ...     return "0x%s"%("00000000%s"%(hex(n&0xffffffff)[2:-1]))[-8:]
    ...
    >>> print hex3(-1)
    0xffffffff
    >>> print hex3(17)
    0x00000011
    

    Or, avoiding the hex() altogether, thanks to Ignacio and bobince:

    def hex2(n):
        return "0x%x"%(n&0xffffffff)
    
    def hex3(n):
        return "0x%s"%("00000000%x"%(n&0xffffffff))[-8:]
    
    Ellery Newcomer : .. or it would if I were less dyslexic ..
    bobince : Don't rely on the 'L' suffix, it is going away in Python 3.0 so hex2 will chop off a digit. The %x formatting operator is generally a better bet than hex().
    paxdiablo : Incorporated comment and Ignacios option below into accepted answer (and gave Ignacio an upvote)
    From paxdiablo
  • '%#4x' % (-1 & 0xffffffff)
    

0 comments:

Post a Comment