84 Stimmen

Formatiere ints in einen String aus Hexadezimalzahlen

Ich muss eine Zeichenfolge aus Hexadezimalziffern aus einer Liste von zufälligen ganzen Zahlen (0-255) erstellen. Jede Hexadezimalziffer sollte durch zwei Zeichen dargestellt werden: 5 - "05", 16 - "10", usw.

Beispiel:

Eingabe: [0,1,2,3,127,200,255], 
Ausgabe: 000102037fc8ff

Ich habe es geschafft, folgendes zu erstellen:

#!/usr/bin/env python

def format_me(nums):
    result = ""
    for i in nums:
        if i <= 9:
            result += "0%x" % i
        else:
            result += "%x" % i
    return result

print format_me([0,1,2,3,127,200,255])

Allerdings sieht das ein bisschen umständlich aus. Gibt es eine einfachere Möglichkeit?

0 Stimmen

13voto

gak Punkte 30810

Ähnlich wie bei meiner anderen Antwort, nur mit der Wiederholung des Formatstrings:

>>> zahlen = [1, 15, 255]
>>> fmt = '{:02X}' * len(zahlen)
>>> fmt.format(*zahlen)
'010FFF'

0 Stimmen

Genau wie eine Ergänzung zu dieser Antwort: Wenn Sie die Hexadezimalzahl in Kleinbuchstaben drucken möchten, verwenden Sie "{:02x}.format(number)"

6voto

roskakori Punkte 2729

Ab Python 3.6 können Sie F-Strings verwenden:

>>> nummer = 1234
>>> f"{nummer:04x}"
'04d2'

4voto

Sven Marnach Punkte 525472
a = [0,1,2,3,127,200,255]
print str.join("", ("%02x" % i for i in a))

druckt aus

000102037fc8ff

(Beachten Sie auch, dass Ihr Code für Zahlen im Bereich von 10 bis 15 nicht funktioniert.)

1voto

Frankie Med Punkte 1

Von Python-Dokumentation. Mit der integrierten format() Funktion können Sie die hexadezimale Basis mit einem 'x' oder 'X' festlegen Beispiel:

x= 255 print('die Zahl ist {:x}'.format(x))

Ausgabe:

die Zahl ist ff

Hier sind die Basisoptionen

Typ
'b' Binärformat. Gibt die Zahl in Basis 2 aus. 'c' Zeichen. Konvertiert die Zahl in das entsprechende Unicode-Zeichen bevor es gedruckt wird. 'd' Dezimale Ganzzahl. Gibt die Zahl in Basis 10 aus. 'o' Oktalformat. Gibt die Zahl in Basis 8 aus. 'x' Hex-Format. Gibt die Zahl in Basis 16 aus, wobei Kleinbuchstaben für die Ziffern über 9 verwendet werden. 'X' Hex-Format. Gibt die Zahl in Basis 16 aus, wobei Großbuchstaben für die Ziffern über 9 verwendet werden. 'n' Nummer. Das ist das Gleiche wie 'd', außer dass es die aktuellen Einstellungen für die Landeseinstellung verwendet, um die geeigneten Zahlentrennzeichen einzufügen. None Das Gleiche wie 'd'.

0 Stimmen

Willkommen bei SO! Hast du gesehen, dass die Frage vor fast 10 Jahren gestellt wurde und eine akzeptierte Antwort hat? Immer wenn das der Fall ist, antworte bitte nur, wenn du eine wirklich substanzielle Verbesserung bieten kannst. (Außerdem denke ich, dass du die Frage falsch verstanden hast: Es ging nicht darum, wie man hexadezimal formatiert, sondern um die Erstellung einer spezifischen Zeichenfolge.)

0voto

selfboot Punkte 1341

Mit Python 2.X kannst du folgendes tun:

numbers = [0, 1, 2, 3, 127, 200, 255]
print "".join(chr(i).encode('hex') for i in numbers)

print

'000102037fc8ff'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X