Seite 1 von 1
String zu Hex-Array konvertieren
Verfasst: Freitag 28. April 2017, 07:24
von tom200
Wie konvertiere ich einen String
z.B. "TEST" in ein Hex Array (0x54, 0x45, 0x53, 0x54) in Python 3.
Ich habe diverse Beiträge gelesen, komme aber nicht zu Ziel!
Vielen Dank!
Re: String zu Hex-Array konvertieren
Verfasst: Freitag 28. April 2017, 08:05
von sebastian0202
Hallo,
was hast du denn bisher probiert?
Wie sieht dein bisheriger Code aus?
Große Probleme wenn möglich immer in kleine Probleme aufteilen.
Zwei Module können dir bei der Lösung deines Problems helfen: codecs / binascii.
Re: String zu Hex-Array konvertieren
Verfasst: Freitag 28. April 2017, 09:10
von tom200
Ich kämpfe mich von einem Codebeispiel zum nächsten.
grundsätzlich funktioniert dieses Beispiel:
import binascii
x= b'TEST'
x = binascii.hexlify(x)
y = str(x,'ascii')
print(x)
print(y)
Nur weiß ich erstens nicht, wie ich meinen String "TEST" in x=b'TEST' implenentiere und zum zweiten passt das Ausgabeformat nicht.
Ich drehe mich einfach im Kreis, vermute aber dass es ein ganz einfache Lösung gibt.
Danke für jeden Tip!
Re: String zu Hex-Array konvertieren
Verfasst: Freitag 28. April 2017, 09:30
von sebastian0202
Hallo,
wie ein STRING nach BYTES konvertiert wird lässt sich leicht über Google herausfinden.
Code: Alles auswählen
>>>import codecs
>>>test = "hi"
>>>test
'hi'
>>>test = codecs.encode(test)
>>>test
b'hi'
Mit format hast du die Möglichkeit ein '0x' voranzustellen.
Code: Alles auswählen
>>>test = "hi"
>>>for spell in test:
... "0:#x".format(spell)
...
'0x68'
'0x69'
Re: String zu Hex-Array konvertieren
Verfasst: Freitag 28. April 2017, 10:34
von snafu
tom200 hat geschrieben:Wie konvertiere ich einen String
z.B. "TEST" in ein Hex Array (0x54, 0x45, 0x53, 0x54) in Python 3.
Das ist doch lediglich eine andere Darstellungsart. Ist wirklich - gemäß des bisherigen Vorschlags - eine Zeichenkette gemeint, die hexadezimale Werte beschreibt? In welchem Zusammenhang benötigst du das?
Re: String zu Hex-Array konvertieren
Verfasst: Mittwoch 3. Mai 2017, 06:51
von alienskin
Eine Möglichkeit wäre:
Code: Alles auswählen
>>> test = 'TEST'
>>> mybytes = bytearray()
>>> mybytes.extend(map(ord, test))
>>> print('test: ' + str(mybytes.hex()))
test: 54455354
Wenn es von einer Ganzzahl kommt:
Code: Alles auswählen
>>> zahl = 123456
>>> zbytes = zahl.to_bytes(4, byteorder='big', signed=False)
>>> print('zahl:' + str(zbytes.hex()))
zahl:0001e240
Da kannst Du dann die Länge mitbestimmen...
Re: String zu Hex-Array konvertieren
Verfasst: Mittwoch 3. Mai 2017, 08:01
von Sirius3
@alienskin: Deine Möglichkeit funktioniert nur, solange der String test nur Zeichen mit einem Codepoint <256 enthält. Und dann wäre es besser, das Encoding explizit anzugeben, also:
Code: Alles auswählen
>>> test = "TEST"
>>> bytes = bytearray(test, "latin1")
>>> print('test: {}'.format(bytes.hex())
test: 54455354
wobei hier der my-Präfix weggelassen wurde, da er keinen Informationsgehalt hat, .format benutzt wird statt + und das Ergebnis von hex nicht per str in einen String verwandelt wurde, da das Ergebnis schon ein String ist.
Statt eines bytearrays reicht hier aber auch ein bytes-Objekt, da Du ja den Inhalt nicht ändern möchtest:
Code: Alles auswählen
>>> test = "TEST"
>>> print('test: {}'.format(test.encode('latin1').hex())
test: 54455354
Re: String zu Hex-Array konvertieren
Verfasst: Mittwoch 3. Mai 2017, 08:03
von tom200
Danke Euch schon mal für die zahlreichen Hilfstellungen. Ich melde zurück mich sobald ich zum Testen komme.
Re: String zu Hex-Array konvertieren
Verfasst: Sonntag 7. Mai 2017, 14:04
von tom200
Danke für die Hilfe -- funktioniert!