Python:将字符串转换为字节数组

And*_*Dev 52 python

假设我有一个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)

  • 这是公认的答案,在 Python3 中不起作用。您能否添加其他答案中指出的python3版本? (12认同)

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变量名,因为它是内置的.

  • 关于[encode()](https://docs.python.org/3.4/library/stdtypes.html#str.encode),它返回一个自然扩展bytearray的bytes对象. (4认同)
  • 对于Python 3,这对我来说看起来更干净:`s =“ ABCD”`,`b = bytearray()`,`b.extend(s.encode())` (3认同)
  • `map(ord, s)` 将返回大于 255 的值,除非您的字符串是严格的 ASCII。请更新您的答案以包含类似 `s.encode('utf-8')` 的内容。(请注意,UTF-8 是 ASCII 的严格超集,因此它不会以任何方式改变 ASCII 字符串。) (2认同)
  • @9000 使用 `.encode()` 和 `.encode('utf-8')` 是不正确的。如果您不希望转换字节,请使用“map(ord, ...)”。https://repl.it/repls/MistySubtleVisitors 只需按“运行”即可查看结果。 (2认同)

old*_*ide 13

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

  1. 用于encode()将字符串转换为字节,不可变
  2. 用于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)


小智 12

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


mge*_*ear 7

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


jul*_*sar 6

这在 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)

希望这可以帮助