Ce que tout le monde a dit ci-dessus est vrai - 0xff est la même chose que 255 en décimal. Si vous avez besoin de conserver la représentation de la chaîne de caractères pour une autre raison, vous pouvez faire quelque chose comme ceci :
class VerboseInt(object):
def __init__(self, val):
'''
pass in a string containing an integer value -- we'll detect whether
it's hex (0x), binary (0x), octal (0), or decimal and be able to
display it that way later...
'''
self.base = 10
if val.startswith('0x'):
self.base = 16
elif val.startswith('0b'):
self.base = 2
elif val.startswith('0'):
self.base = 8
self.value = int(val, self.base)
def __str__(self):
''' convert our value into a string that's in the same base
representation that we were initialized with.
'''
formats = { 10 : ("", "{0}"),
2: ("0b", "{0:b}"),
8: ("0", "{0:o}"),
16: ("0x", "{0:x}")
}
fmt = formats[self.base]
return fmt[0] + fmt[1].format(self.value)
def __repr__(self):
return str(self)
def __int__(self):
''' get our value as an integer'''
return self.value