如何在 Python 中将字符串转换为字节数组

假设我有一个4个字符的字符串,我想把这个字符串转换成一个字节数组,在这个数组中,字符串中的每个字符都被转换成它的十六进制等价物。例如:。

str = "ABCD"

我正在努力让我的输出

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

有没有一种直接的方法来实现这一点?

334271 次浏览

在这里,encode 函数可以帮助您,encode 返回字符串的编码版本

In [44]: str = "ABCD"


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

或者可以使用数组模块

In [49]: import array


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

如果你想要巫术:

print map(hex, a)

只需使用 bytearray()即可,它是一个字节列表。

巨蟒2:

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

巨蟒3:

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

顺便说一下,不要使用 str作为变量名,因为它是内置的。

获取字节数组的另一种方法是将字符串编码为 ascii: b=s.encode('ascii')

这对我很有用(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]

参考文献: Http://www.dotnetperls.com/bytes-python

对于 python 3,它在@HYRY 上工作。我需要它来处理 dbus.array 中返回的数据。这是唯一的办法

s = "ABCD"

从数组导入数组

a = array("B", s)

这在 Python2和 Python3中都适用:

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

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

希望这个能帮上忙

根据您的需要,这可以是一个步骤或两个步骤

  1. 使用 encode()将字符串转换为字节,不可变
  2. 使用 bytearray()将字节转换为字节数组,可变
s="ABCD"
encoded=s.encode('utf-8')
array=bytearray(encoded)

下面的验证是在 Python 3.7中完成的

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

由于没有一个答案能产生正确的 array('B', [41, 42, 43, 44]),而且 阿瓦萨的回答在 Python3中失败了,所以我在这里提出了我的替代方案:

import array
s = 'ABCD'
a = array.array('B', [ord(c) for c in s])
print(a)

印刷品

array('B', [65, 66, 67, 68])

注意,65-68是“ ABCD”的正确 ASCII。