[Tutor] String formatting hex numbers
Alan Gauld
alan.gauld at btinternet.com
Sun May 31 02:24:39 CEST 2009
"Tony Cappellini" <cappy2112 at gmail.com> wrote
> sys.stdout.write( "\r%-8s ... 0x%08X->0x%08X " % ( descr,
> long(startAddr), long(endAddr) )
>
> Why are these displayed with a leading negative sign (between the 0x
> and the actual number)- as seen below?
>
> 0x-1BFFF400 to 0x-1BFFF000
Because they are negative values and the leading 0x is a sting
hard coded before the number. Let me rework the example to
make that clearer:
>>> "HEX:%0X" % -29
'HEX:-1D'
>>>
I replaced 0x with HEX: and useed a negative decimal number
as input. Now you can see my string (HEX:) followed by the
formatted hex number with the negative sign correctly placed
before the digits.
The problem is that Pythons string formatting doesn't know
about prepending 0x to numbers. You need to use the hex
function for that:
>>> hex(-27)
'-0x1b'
>>>
So the format string becomes:
>>> "HEX:%s" % hex(-29)
'HEX:-0x1d'
And all is as expected.
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
More information about the Tutor
mailing list