Seite 1 von 1

Antwort byte-weise auslesen

Verfasst: Dienstag 3. Juli 2018, 09:21
von Ulrich_G
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

Re: Antwort byte-weise auslesen

Verfasst: Dienstag 3. Juli 2018, 09:33
von __deets__
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.

Re: Antwort byte-weise auslesen

Verfasst: Dienstag 3. Juli 2018, 10:02
von Ulrich_G
Danke schon mal ... aber was genau meinst du mit
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?

Re: Antwort byte-weise auslesen

Verfasst: Dienstag 3. Juli 2018, 10:07
von Sirius3
@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.

Re: Antwort byte-weise auslesen

Verfasst: Dienstag 3. Juli 2018, 10:08
von __deets__
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!

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

Re: Antwort byte-weise auslesen

Verfasst: Dienstag 3. Juli 2018, 10:28
von Ulrich_G
Okay ... das ist ja wirklich sehr deutlich einfacher als ich das von vba gewohnt bin. Vielen dank.