Seite 1 von 1

Bytearray

Verfasst: Donnerstag 22. September 2022, 15:07
von pascal.buehler
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

Re: Bytearray

Verfasst: Donnerstag 22. September 2022, 15:26
von __deets__
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.

Re: Bytearray

Verfasst: Donnerstag 22. September 2022, 16:38
von __blackjack__
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]: '$'

Re: Bytearray

Verfasst: Mittwoch 12. April 2023, 07:02
von pascal.buehler
Ja stimmt, danke.

Re: Bytearray

Verfasst: Mittwoch 12. April 2023, 09:29
von pascal.buehler
Aber sollte das nicht durchgängig immer gleich sein? Es ist nur verwirrend?

Re: Bytearray

Verfasst: Mittwoch 12. April 2023, 09:36
von Sirius3
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.

Re: Bytearray

Verfasst: Mittwoch 12. April 2023, 19:15
von snafu
Eine übersichtliche hexadezimale Darstellung kann man so erhalten:

Code: Alles auswählen

" ".join(map("{:02X}".format, byte_values))

Re: Bytearray

Verfasst: Mittwoch 12. April 2023, 21:21
von __blackjack__
@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'