假设我有一个4个字符的字符串,并且我想将此字符串转换为字节数组,其中字符串中的每个字符都被转换为其十六进制等效字符串.例如
str = "ABCD"
Run Code Online (Sandbox Code Playgroud)
我正试图让我的输出成为
array('B', [41, 42, 43, 44])
Run Code Online (Sandbox Code Playgroud)
有没有直接的方法来实现这一目标?
ava*_*sal 50
encode函数可以帮到你,encode返回字符串的编码版本
In [44]: str = "ABCD"
In [45]: [elem.encode("hex") for elem in str]
Out[45]: ['41', '42', '43', '44']
Run Code Online (Sandbox Code Playgroud)
或者您可以使用阵列模块
In [49]: import array
In [50]: print array.array('B', "ABCD")
array('B', [65, 66, 67, 68])
Run Code Online (Sandbox Code Playgroud)
Pit*_*kos 36
只需使用a bytearray()是一个字节列表.
Python2:
s = "ABCD"
b = bytearray()
b.extend(s)
Run Code Online (Sandbox Code Playgroud)
Python3:
s = "ABCD"
b = bytearray()
b.extend(map(ord, s))
Run Code Online (Sandbox Code Playgroud)
顺便说一下,不要使用str变量名,因为它是内置的.
old*_*ide 13
根据您的需要,这可以是一步或两步
encode()将字符串转换为字节,不可变bytearray()将字节转换为字节数组,可变s="ABCD"
encoded=s.encode('utf-8')
array=bytearray(encoded)
Run Code Online (Sandbox Code Playgroud)
以下验证是在Python 3.7中完成的
>>> s="ABCD"
>>> encoded=s.encode('utf-8')
>>> encoded
b'ABCD'
>>> array=bytearray(encoded)
>>> array
bytearray(b'ABCD')
Run Code Online (Sandbox Code Playgroud)
这对我有用(Python 2)
s = "ABCD"
b = bytearray(s)
# if your 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]
Run Code Online (Sandbox Code Playgroud)
参考:http: //www.dotnetperls.com/bytes-python
这在 Python 2 和 3 中都适用:
>>> bytearray(b'ABCD')
bytearray(b'ABCD')
Run Code Online (Sandbox Code Playgroud)
注释字符串以b.
要获取单个字符:
>>> 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
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助