Frage

Wie kann ich einen Hex-String in einen int in Python konvertieren?

Ich kann es als "0xffff" oder einfach nur "ffff".

War es hilfreich?

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!

Ist mit eval in Python eine schlechte Praxis?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top