Konvertieren Hex-String in Python int
Frage
Wie kann ich einen Hex-String in einen int in Python konvertieren?
Ich kann es als "0xffff
" oder einfach nur "ffff
".
Lösung
Ohne das Präfix 0x, müssen Sie die Basis explizit angeben, sonst gibt es keine Möglichkeit zu sagen:
x = int("deadbeef", 16)
Mit das Präfix 0x, Python automatisch hex und dezimal unterscheiden.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Sie muss 0
als Basis angeben, um dieses Präfix-Erraten Verhalten aufzurufen;. Den zweiten Parameter Weglassen bedeutet Basis 10 zu übernehmen)
Andere Tipps
int(hexString, 16)
funktioniert der Trick, und arbeitet mit und ohne Präfix 0x:
>>> int("a", 16)
10
>>> int("0xa",16)
10
Für jede gegebene Zeichenkette s:
int(s, 16)
Convert Hex-String in Python int
Ich kann es als
"0xffff"
oder nur"ffff"
.
einen String in einen int konvertieren, übergeben Sie die Zeichenfolge mit der Basis int
entlang Sie von konvertieren.
Die beiden Strings für die Konvertierung auf diese Weise genügen:
>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535
Miete int
schließen
Wenn Sie 0 als Basis passieren, int
die Basis aus dem Präfix in der Zeichenfolge schließen.
>>> int(string_1, 0)
65535
Ohne die hexadezimalen Präfix, 0x
, hat int
nicht genügend Informationen hat, mit denen zu erraten:
>>> int(string_2, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'
Literale:
Wenn Sie in den Quellcode oder einen Dolmetscher eingeben, Python wird die Konvertierung für Sie:
>>> integer = 0xffff
>>> integer
65535
Dies wird nicht mit ffff
arbeiten, weil Python denken Sie einen berechtigten Python Namen zu schreiben sind versucht, statt:
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
Python-Nummern beginnen mit einem numerischen Zeichen, während Python Namen nicht mit einem numerischen Zeichen beginnen.
Dans Antwort Hinzufügen von oben: Wenn Sie die int () Funktion mit einem Hex-String liefern, werden Sie angeben müssen, denken die Basis als 16, oder es wird nicht Sie es einen gültigen Wert hat. Festlegen Basis 16 ist nicht erforderlich, für Hex-Zahlen nicht in Zeichenfolge enthalten ist.
print int(0xdeadbeef) # valid
myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
Die schlimmste Art und Weise:
>>> def hex_to_int(x):
return eval("0x" + x)
>>> hex_to_int("c0ffee")
12648430
Bitte tu das nicht!
oder ast.literal_eval
(dies ist sicher, im Gegensatz zu eval
):
ast.literal_eval("0xffff")
Demo:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
In Python 2.7, int('deadbeef',10)
scheint nicht zu funktionieren.
Die folgenden Werke für mich:
>>a = int('deadbeef',16)
>>float(a)
3735928559.0
Das Formatierungsoption ‚% x‘% scheint für mich auch in Zuweisungsanweisungen zu arbeiten. (Unter der Annahme, Python 3.0 und höher)
Beispiel:
a = int('0x100', 16)
print(a) #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
Wenn Sie die Python-Interpreter verwenden, können Sie nur geben Sie 0x (Ihren Hex-Wert) und der Dolmetscher wird es für Sie automatisch konvertieren.
>>> 0xffff
65535
mit '0x' -Präfix, könnten Sie auch eval Funktion
Zum Beispiel
>>a='0xff'
>>eval(a)
255