Konvertieren Zahl in einen Binär-string
Ist dies der beste Weg zu konvertieren eine Python-Zahl in eine hex-string?
number = 123456789
hex(number)[2:-1].decode('hex')
Manchmal funktioniert es nicht und beschwert sich über die Seltsame Zeichenfolge mit der Länge, wenn Sie tun 1234567890.
Klarstellung:
Werde ich von int nach hex.
Auch, muss ich es escapen.
IE:
1234567890 -> '\x49\x96\x02\xd2' nicht '499602D2'
Auch, es muss in der Lage sein, Python-Ganzzahl. DH. etwas größer als ein Int.
Edit:
Hier ist die beste Lösung bisher habe ich zusammengeschustert von Paolo und Devin ' s post.
def hexify(num):
num = "%x" % num
if len(num) % 2:
num = '0'+num
return num.decode('hex')
- Sie nicht möchten, konvertieren Sie Ihre Zahl in ein hex-string überhaupt; Sie möchten, konvertieren Sie ihn in eine binäre Darstellung, oder base256.
- ack, "hex-string" ist wirklich nicht der richtige Begriff hier
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie string-Formatierung:
Ich bin mir nicht sicher, genau das, was Sie wollen, aber haben Sie schaute auf die
struct
Modul?Gegeben
Können Sie tun:
Beachten Sie, dass
'\x5b' == '['
.Können, können Sie auch in umgekehrter endianness:
Edit: ich bin mir nicht sicher, was du meinst mit "größer, als eine lange", da AFAIK longs in python sind unbegrenzt (außer durch Speicher). Jedoch, Sie können deal mit größeren ganzen zahlen nur durch die Aufteilung und Verkettung. z.B. gegeben:
Ziel ist:
Also:
Sehen, dass
s
entspricht das Ergebnishex(n)
oben:Weil es nicht sinnvoll ist. Wie machen Sie fit 'AAB' in einem Raum, der nimmt entweder 2 oder 4 stellen? Jedes byte werden zwei hex-Zeichen. Wenn Sie eine ungerade Anzahl von hex-Zeichen, das gewünschte Ergebnis ist nicht eindeutig. Wollen Sie es auf den Gegenwert von 0AAB oder AAB0? Wenn Sie wissen, welche Sie wollen, es zu sein, entspricht, fügen Sie einfach, dass der Charakter an der richtigen Stelle, bevor die Decodierung.
d.h.
(('0' + foo) if len(foo) % 2 else foo).decode('hex')
wobei foo ein string der form zurückgegeben%x.
(('0' + foo) if len(foo) % 2 else foo).decode('hex')
finden http://docs.python.org/library/string.html
Wenn Sie wissen, wie lange Sie Ihre Ausgabe-strings sein sollte, string-Formatierung arbeiten. Zum Beispiel, um vier-Zeichen-strings, benötigen Sie eine formatierte Länge von acht:
Diese voran Nullen falls deine Nummer nicht "tanken" Sie die Zeichenfolge. Zum Beispiel, mit sechs-Zeichen-strings:
Edit:
Zu "erkennen" Sie die Länge des Ziel-strings verwenden, können Sie die
math.log
Funktion:Als Paolo erwähnt, string-Formatierung ist der Weg zu gehen. Beachten Sie, dass Sie können wählen zwischen klein-und Großbuchstaben:
Beachten Sie, dass entgangen fügt eine führende null im Fall einer ungerade Anzahl von hex-Ziffern. Diese Lösung funktioniert für strings beliebiger Länge.
einer der sicherste Weg, für willkürliche zahlen, ist die Verwendung der 'array' - Modul so: