Say that I have a 4 character string, and I want to convert this string into a byte array where each character in the string is translated into its hex equivalent. e.g.
str = "ABCD"
I'm trying to get my output to be
array('B', [41, 42, 43, 44])
Is there a straightforward way to accomplish this?
This question is related to
python
An alternative to get a byte array is to encode the string in ascii: b=s.encode('ascii')
.
This work in both Python 2 and 3:
>>> bytearray(b'ABCD')
bytearray(b'ABCD')
Note string started with b
.
To get individual chars:
>>> 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
Hope this helps
Depending on your needs, this can be one step or two steps
1. use encode() to convert string to bytes, immutable
2. use bytearray() to convert bytes to bytearray, mutable
s="ABCD"
encoded=s.encode('utf-8')
array=bytearray(encoded)
The following validation is done in Python 3.7
>>> s="ABCD"
>>> encoded=s.encode('utf-8')
>>> encoded
b'ABCD'
>>> array=bytearray(encoded)
>>> array
bytearray(b'ABCD')
s = "ABCD"
from array import array
a = array("B", s)
If you want hex:
print map(hex, a)
Just use a bytearray()
which is a list of bytes.
Python2:
s = "ABCD"
b = bytearray()
b.extend(s)
Python3:
s = "ABCD"
b = bytearray()
b.extend(map(ord, s))
By the way, don't use str
as a variable name since that is builtin.
for python 3 it worked for what @HYRY posted. I needed it for a returned data in a dbus.array. This is the only way it worked
s = "ABCD"
from array import array
a = array("B", s)
This works for me (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]
Reference: http://www.dotnetperls.com/bytes-python
Source: Stackoverflow.com