Inconsistency in hex()

Bengt Richter bokr at oz.net
Tue Jul 12 19:07:51 EDT 2005


On Tue, 12 Jul 2005 21:17:07 +1000, Steven D'Aprano <steve at REMOVETHIScyber.com.au> wrote:

>hex() of an int appears to return lowercase hex digits, and hex() of a
>long uppercase.
>
>>>> hex(75)
>'0x4b'
>>>> hex(75*256**4)
>'0x4B00000000L'
>
>By accident or design? Apart from the aesthetic value that lowercase hex
>digits are ugly, should we care?
>
>It would also be nice if that trailing L would disappear.
>
 >>> '%010X'% 0x12345678
 '0012345678'
 >>> '%010X'% 75
 '000000004B'
 >>> '%010X'% (75*256**4)
 '4B00000000'
 >>> '%010X'% (-75*256**4)
 '-4B00000000'
 >>> '%010X'% (-75)
 '-00000004B'

I've ranted about the lack of a natural format for showing
the hex of a canonical twos-complement representation of a negative number,
but I guess I'll let it go with this mention ;-)

BTW, yeah, I know it's not so hard to write
 >>> '%010X'% (-75 &0xffffffffff)
 'FFFFFFFFB5'
 >>> '%010X'% (-75*256**4 &0xffffffffff)
 'B500000000'
or a helper or a str subclass that does __mod__ differently but that's not with the batteries ;-/
Regards,
Bengt Richter



More information about the Python-list mailing list