Konvertieren von integer in hex-string mit dem besonderen format
Ich bin neu in python und habe Folgendes problem: ich brauche, um zu konvertieren eine ganze Zahl in einen hex-string mit 6 bytes.
z.B.
281473900746245 --> "\xFF\xFF\xBF\xDE\x16\x05"
Das format des hex-string ist wichtig. Die Länge des int-Wert ist variabel.
Format '0xffffbf949309L " don' T Arbeit für mich. (Ich bekomme das mit hex(int-Wert))
Meine endgültige Lösung (nach einigen "spielen") ist:
def _tohex(self, int_value):
data_ = format(int_value, 'x')
result = data_.rjust(12, '0')
hexed = unhexlify(result)
return hexed
Danke für all die Hilfe!
- Wollen Sie eine Zeichenkette der Länge 6 definiert die Python string-literal
"\xFF\xFF\xBF\xDE\x16\x05"
oder der string der Länge 24 gegeben durch"\\xFF\\xFF\\xBF\\xDE\\x16\\x05"
? - Die Begriffe "hex-string" und "format" sind irreführend, was Sie wirklich wollen ist zu eine ganze Zahl beliebiger Größe ein byte-string mit big-endian-Reihenfolge.
- Bitte entschuldigen Sie mein Englisch, ich übersetzte die Bedingungen von meiner ersten Sprache - danke für die übersetzung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es vielleicht eine bessere Lösung, aber Sie können dies tun:
Aufteilung:
Update:
Pro @multipleinstances und @Sven-Kommentare, da Sie möglicherweise den Umgang mit long-Werten, müssen Sie möglicherweise zu zwicken die Ausgabe von hex ein wenig:
Manchmal jedoch, die Ausgabe von hex-möglicherweise eine ungerade Länge, die brechen würde entschlüsseln, so würde es wohl besser sein, erstellen Sie eine Funktion, um dies zu tun:
hex(x)[2:]
produziertffffbfde1605L
werden, wodurch eineTypeError
im Dekodieren.hex(x)[2:-1]
besser sein könnte.hex(x)[2:].rstrip("L")
sollte die Arbeit tun, obwohl.zfill
.2748
ist0xABC
, undstr.decode('hex')
erfordern würde0abc
stattabc
.0x
Präfix undL
suffix verwendenformat(number, 'x')
statthex()
.In Python 3.2 oder höher verwenden, können Sie die
to_bytes()
Methode der interger.math.log
oderint.bit_length
) und wahrscheinlich angeben möchtenbyteorder='big'
.Wenn Sie nicht mit Python 3.2 (ich bin mir ziemlich sicher, dass Sie nicht wird), sollten Sie den nächsten Ansatz: