Hoe tekenreeks naar bytearray in Python te converteren

Stel dat ik een reeks van 4 tekens heb en dat ik deze reeks wil omzetten in een bytearray waarin elk teken in de reeks wordt vertaald in zijn hex-equivalent. bijv.

str = "ABCD"

Ik probeer mijn output te laten zijn

array('B', [41, 42, 43, 44])

Is er een eenvoudige manier om dit te bereiken?


Antwoord 1, autoriteit 100%

encode functie kan je hierbij helpen, encode geeft een gecodeerde versie van de string terug

In [44]: str = "ABCD"
In [45]: [elem.encode("hex") for elem in str]
Out[45]: ['41', '42', '43', '44']

of u kunt de array-module gebruiken

In [49]: import array
In [50]: print array.array('B', "ABCD")
array('B', [65, 66, 67, 68])

Antwoord 2, autoriteit 90%

Gebruik gewoon een bytearray()die een lijst met bytes is.

Python2:

s = "ABCD"
b = bytearray()
b.extend(s)

Python3:

s = "ABCD"
b = bytearray()
b.extend(map(ord, s))

Trouwens, gebruik strniet als variabelenaam, aangezien dat ingebouwd is.


Antwoord 3, autoriteit 34%

Een alternatief voor het verkrijgen van een bytearray is om de string in ascii te coderen: b=s.encode('ascii').


Antwoord 4, autoriteit 16%

Dit werkt voor mij (Python 2)

s = "ABCD"
b = bytearray(s)
# if you print whole b, it still displays it as if its original string
print b
# but print first item from the array to see byte value
print b[0]

Referentie:
http://www.dotnetperls.com/bytes-python


Antwoord 5, autoriteit 10%

Dit werkt in zowel Python 2 als 3:

>>> bytearray(b'ABCD')
bytearray(b'ABCD')

Opmerking die begint met b.

Individuele tekens ophalen:

>>> print("DEC HEX ASC")
... for b in bytearray(b'ABCD'):
...     print(b, hex(b), chr(b))
DEC HEX ASC
65 0x41 A
66 0x42 B
67 0x43 C
68 0x44 D

Hopelijk helpt dit


Antwoord 6, autoriteit 7%

Afhankelijk van uw behoeften kan dit één of twee stappen zijn

  1. gebruik encode()om string naar bytes te converteren, onveranderlijk
  2. gebruik bytearray()om bytes te converteren naar bytearray, veranderbaar
s="ABCD"
encoded=s.encode('utf-8')
array=bytearray(encoded)

De volgende validatie wordt gedaan in Python 3.7

>>> s="ABCD"
>>> encoded=s.encode('utf-8')
>>> encoded
b'ABCD'
>>> array=bytearray(encoded)
>>> array
bytearray(b'ABCD')

Antwoord 7, autoriteit 3%

s = "ABCD"
from array import array
a = array("B", s)

Als je hex wilt:

print map(hex, a)

Antwoord 8

voor python 3 werkte het voor wat @HYRY plaatste. Ik had het nodig voor een geretourneerde gegevens in een dbus.array. Dit is de enige manier waarop het werkte

s = "ABCD"

van array import array

a = array("B", s)

Other episodes