TEXT String nach Hex string?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SolarGuido
User
Beiträge: 21
Registriert: Donnerstag 17. August 2017, 07:10

Hallo ich habe ein Problem,

wenn ich in python 2 code folgendes stehen habe

QPIRI= "\x51\x50\x49\x52\x49\xF8\x54\x0D"
print QPIRI
dann kommt da raus:
QPIRI▒T
Das ist gut so und so gewollt..

Nun habe ich in einem text.txt das stehen:
\x51\x50\x49\x52\x49\xF8\x54\x0D

wenn ich dieses file nun mit
file = open('/home/pi/pyhton/text.txt', 'r')
QCODE = file.read().strip()
print QCODE
dann kommt da raus:
\x51\x50\x49\x52\x49\xF8\x54\x0D

das ist schlecht denn ich möchte es gerne auch als Hex definiert haben wie oben im Beispiel.

Ich habe nur ganz wenig python erfahrung wäre cool wenn mir jemand hier helfen kann.

Da gibt es doch bestimmt einen Befehl der den string genau so behandelt als wenn ich den text in "" setze?
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Zuerstmal musst du verstehen, was da passiert. Bei einem Stringliteral in Python (also “irgendwas” und seine Spielarten) hat man die Möglichkeit geschaffen, durch sogenannte escape Codes Byte-werte anzugeben, die sonst nicht Druck- Bzw eingebbar sind. Durch den \ leitest du das ein. Ein paar Klassiker sind abgekürzt, zb \n ist neue Zeile. Du könntest aber auch \x0a schreiben. Das ist das gleiche.

Wenn du aber eine Datei einliest, dann liest du die Bytes da genau so ein, wie sie auf der Festplatte liegen. Escape Codes gibt es da nicht.

Womit also zwei Möglichkeiten bestehen:

- schreib in die Datei die Bytes. Nicht ASCII-Zeichen die der escape Konvention entsprechen. Dazu könntest du zb einen hex-editor verwenden.
- transformier die Zeichen in Deiner Datei. Eine Möglichkeit dazu wäre, das Modul binascii zu benutzen. Mit binascii.unhexlify(“0a”) zb wandelst du hex-codierte Daten um. ABER ACHTUNG: das klappt NICHT mit den escape Codes! Du musst also die ganzen \x-e loswerden.
SolarGuido
User
Beiträge: 21
Registriert: Donnerstag 17. August 2017, 07:10

Vielen Dank,
also wenn ich die \x weg lasse habe ich dann:
5150495249F8540D
oder muss ich das separieren
51 50 49 52 49 F8 54 0D
ich brauche ja den ganzen Hex Ausdruck
das sind ja schon die hex Zahlen, wie kann ich daraus enen Hex ausdruck machen?

Ich verstehe das nich nicht wirklich

Hex Ausdruck = "\x51"
aber
Hex Ausdruck = 51 50 49 52 49 F8 54 0D
wie geht das?
SolarGuido
User
Beiträge: 21
Registriert: Donnerstag 17. August 2017, 07:10

QPIRI= "\x51\x50\x49\x52\x49\xF8\x54\x0D"
filename = '/home/pi/pyhton/text.txt'
with open(filename, 'rb') as f:
content = f.read()
QPIRIH = content.decode("hex")
print QPIRI
print QPIRIH

sieht so aus das es so klappt, im text file stehen jetzt keine \x sondern nur die Hex zahlen
Antworten