Bytearray

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
pascal.buehler
User
Beiträge: 8
Registriert: Dienstag 5. Oktober 2021, 08:32

Ist das ein Bug?

RU = (249, 253, 12, 100, 11, 36, 129, 68, 206, 4, 139, 157)

bytearray(RU)
bytearray(b'\xf9\xfd\x0cd\x0b$\x81D\xce\x04\x8b\x9d')

Da hat es ein d und ein$ zuviel?

M.f.G. Pascal
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Da sind die ASCII Zeichen passend zu deinen Bytes. Python stellt die dar statt hex Codes, weil es meistens wichtiger ist, Texte lesen zu können.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Veranschaulichung in einer Python-Shell:

Code: Alles auswählen

In [11]: values = [249, 253, 12, 100, 11, 36, 129, 68, 206, 4, 139, 157]

In [12]: binary = bytearray(values)

In [13]: binary
Out[13]: bytearray(b'\xf9\xfd\x0cd\x0b$\x81D\xce\x04\x8b\x9d')

In [14]: list(binary)
Out[14]: [249, 253, 12, 100, 11, 36, 129, 68, 206, 4, 139, 157]

In [15]: list(binary) == values
Out[15]: True

In [16]: bytearray([36])
Out[16]: bytearray(b'$')

In [17]: ord("$")
Out[17]: 36

In [18]: chr(36)
Out[18]: '$'
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
pascal.buehler
User
Beiträge: 8
Registriert: Dienstag 5. Oktober 2021, 08:32

Ja stimmt, danke.
pascal.buehler
User
Beiträge: 8
Registriert: Dienstag 5. Oktober 2021, 08:32

Aber sollte das nicht durchgängig immer gleich sein? Es ist nur verwirrend?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Für Dich mag das verwirrend sein, im Normalfall möchte man aber lesbaren Text auch in Byte-Strings gleich erkennen können, ohne erst die Hex-Codes dekodieren zu müssen.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eine übersichtliche hexadezimale Darstellung kann man so erhalten:

Code: Alles auswählen

" ".join(map("{:02X}".format, byte_values))
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Das gibt's schon fertig als Methode auf `bytearray` (und `bytes`):

Code: Alles auswählen

In [29]: data = bytearray(b'\xf9\xfd\x0cd\x0b$\x81D\xce\x04\x8b\x9d')

In [30]: data.hex()
Out[30]: 'f9fd0c640b248144ce048b9d'

In [31]: data.hex(" ")
Out[31]: 'f9 fd 0c 64 0b 24 81 44 ce 04 8b 9d'
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten