Was alle anderen oben sagen, ist wahr - 0xff ist das gleiche wie 255 dezimal.Wenn Sie in der Lage sein müssen, die String-Darstellung für einen anderen Zweck zu halten, können Sie etwas tun:
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
"den Interpreter zwingen, mir den Wert auf die gleiche Weise zurückzugeben, wie ich ihn definiert habe"? Was bedeutet das? Bedeutet dies, dass "x = 2 + 2" "2 + 2" anstelle von "4" melden sollte? –
Das bedeutet, dass wenn Sie 0xFF eingeben, sollte 0xFF zurückgegeben werden, wenn Sie nach seinem Wert fragen. Ich meine, wenn Sie eine Variable definieren, deren Wert in base-16 (hexadezimal) dargestellt wird, sollte der Interpreter zeigen, dass sie in derselben Base und nicht in base-10 dargestellt ist. –
Was ist der Unterschied zwischen '0xff',' 255' und '128 + 127'? Ich sehe nicht, wie du diese auseinanderhalten kannst? Was ist die Regel? –