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?
TEXT String nach Hex string?
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.
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.
-
- 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?
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?
-
- 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
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