it-swarm.com.de

Konvertiere hexadezimale Zeichenkette in int in Python

Wie konvertiere ich in Python einen Hex-String in einen Int-String?

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

678
Matt

Ohne das 0x-Präfix müssen Sie die Basis explizit angeben, sonst gibt es keine Möglichkeit zu sagen:

x = int("deadbeef", 16)

Mit das 0x-Präfix, Python kann hex und dezimal automatisch unterscheiden.

>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10

(Sie müssen 0 als Basis angeben, um dieses Verhalten beim Erraten des Präfix aufzurufen. Wenn Sie den zweiten Parameter weglassen, wird die Basis 10 angenommen .)

965
Dan Lenski

int(hexString, 16) macht den Trick und funktioniert mit und ohne 0x-Präfix:

>>> int("a", 16)
10
>>> int("0xa",16)
10
144
unwind

Für eine bestimmte Zeichenfolge s:

int(s, 16)
45
Jorge Ferreira

Konvertieren Sie einen Hex-String in Python in einen Int-String

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

Um eine Zeichenfolge in eine Ganzzahl zu konvertieren, übergeben Sie die Zeichenfolge zusammen mit der Basis, von der Sie konvertieren, an int.

Beide Zeichenfolgen reichen für die Konvertierung folgendermaßen aus:

>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535

int ableiten lassen

Wenn Sie 0 als Basis übergeben, leitet int die Basis aus dem Präfix in der Zeichenfolge ab.

>>> int(string_1, 0)
65535

Ohne das hexadezimale Präfix verfügt 0x, int nicht über genügend Informationen, um Folgendes 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 Interpreter tippen, führt Python die Konvertierung für Sie durch:

>>> integer = 0xffff
>>> integer
65535

Dies funktioniert nicht mit ffff, da Python den Eindruck hat, dass Sie stattdessen versuchen, einen legitimen Python -Namen zu schreiben:

>>> 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 können.

34
Aaron Hall

Zur obigen Antwort von Dan hinzufügen: Wenn Sie die int () - Funktion mit einer Hex-Zeichenfolge versehen, müssen Sie die Basis mit 16 angeben, oder es wird nicht angenommen, dass Sie einen gültigen Wert angegeben haben. Die Angabe der Basis 16 ist für Hexadezimalzahlen, die nicht in Zeichenfolgen enthalten sind, nicht erforderlich.

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
12
Max

Der schlimmste Weg:

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

Bitte tu das nicht!

Ist die Verwendung von eval in Python eine schlechte Übung?

4
André Laszlo

Oder ast.literal_eval (dies ist im Gegensatz zu eval sicher):

ast.literal_eval("0xffff")

Demo:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 
3
U10-Forward

In Python 2.7 scheint int('deadbeef',10) nicht zu funktionieren.

Folgendes funktioniert für mich:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0
1
Avi2503

Die Formatierungsoption '% x'% scheint auch für mich in Zuweisungsanweisungen zu funktionieren. (Vorausgesetzt, 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
1
Soundararajan

Wenn Sie den python -Interpreter verwenden, können Sie einfach 0x (Ihren Hex-Wert) eingeben und der Interpreter konvertiert ihn automatisch für Sie.

>>> 0xffff

65535
0
Maysara Alhindi