Hallo
würde gerne eine Antwort (Beispiel: b"\x04\x00\x00\x01\x00\x00\x01\x02\x06\x04\xb2\x05") byteweise auslesen
Hat jemand eine Idee wie ich das am besten umsetzen kann?
Wünschenswert wäre eine Funktion, bei der ich gezielt anfragen kann z.B. GetByte(4) ==> 01
Antwort byte-weise auslesen
Kannst du doch:
antwort[3] == 1
Indizes sind in Python wie in nahezu allen anderen Programmiersprachen 0-basiert. Byte 4 befindet sich also an Index 3. Und mit Python3 resultiert der Zugriff auf ein Byte im Bytestring gleich in einer Ganzzahl. In Python 2 musst du statt 1 '\x01' schreiben.
antwort[3] == 1
Indizes sind in Python wie in nahezu allen anderen Programmiersprachen 0-basiert. Byte 4 befindet sich also an Index 3. Und mit Python3 resultiert der Zugriff auf ein Byte im Bytestring gleich in einer Ganzzahl. In Python 2 musst du statt 1 '\x01' schreiben.
Danke schon mal ... aber was genau meinst du mit
Meinst du damit, ich muss vor dem Auslesen des gewünschten Bytes mein Ergebnis ohne x und \ konvertieren, damit nur noch Ganzzahlen zur Verfügung stehen?
?mit Python3 resultiert der Zugriff auf ein Byte im Bytestring gleich in einer Ganzzahl
Meinst du damit, ich muss vor dem Auslesen des gewünschten Bytes mein Ergebnis ohne x und \ konvertieren, damit nur noch Ganzzahlen zur Verfügung stehen?
@Ulrich_G: was __deets__ meint, ist dass in Python2 der Zugriff über Index auf einen Bytesstring wieder zu einem Ein-Bytestring führte, in Python 3 aber zu einer Zahl. Braucht Dich aber nicht interessieren.
Wie ich aber schon in Deinem anderen Thread geantwortet habe, ist es Quatsch, einen Bytestring per str(...) in die Repräsentation eines Bytestrings zu verwandeln, weil man damit nichts mehr anfangen kann. Alles was Du tun mußt, ist `antwort[3]` zu schreiben.
Wie ich aber schon in Deinem anderen Thread geantwortet habe, ist es Quatsch, einen Bytestring per str(...) in die Repräsentation eines Bytestrings zu verwandeln, weil man damit nichts mehr anfangen kann. Alles was Du tun mußt, ist `antwort[3]` zu schreiben.
Nein, was ich damit meine ist, das ein Zugriff auf ein einzelnes Element eines byte-string eine Zahl liefert.
Und du scheinst nicht ganz zu verstehen, was die Darstellung des Byte-Strings wirklich bedeutet, die du oben angegeben hast. Python kann, anders als andere Programmiersprachen, BELIEBIGE Byte-Strings darstellen. C zB kann das nicht, weil da eine 0 immer den String beendet.
Wenn ein solcher String dann ausgegeben wird, dann greift Python fuer die Darstellung von *nicht* druckbaren Zeichen (also allem ausserhalb ASCII) auf eine Darstellung als Hex-Zahl zu. Deswegen ist aber kein \ und kein x da drin, und da muss nix konvertiert werden!
Und du scheinst nicht ganz zu verstehen, was die Darstellung des Byte-Strings wirklich bedeutet, die du oben angegeben hast. Python kann, anders als andere Programmiersprachen, BELIEBIGE Byte-Strings darstellen. C zB kann das nicht, weil da eine 0 immer den String beendet.
Wenn ein solcher String dann ausgegeben wird, dann greift Python fuer die Darstellung von *nicht* druckbaren Zeichen (also allem ausserhalb ASCII) auf eine Darstellung als Hex-Zahl zu. Deswegen ist aber kein \ und kein x da drin, und da muss nix konvertiert werden!
Code: Alles auswählen
Python 3.6.3 (default, Oct 6 2017, 08:44:35)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = b'\x01\x02HALLO'
>>> s
b'\x01\x02HALLO'
>>> print(s)
b'\x01\x02HALLO'
>>> s[0]
1