Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中将字符串转换为字节数组_Python - Fatal编程技术网

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

如何在Python中将字符串转换为字节数组,python,Python,假设我有一个4个字符的字符串,我想把这个字符串转换成一个字节数组,在这个数组中,字符串中的每个字符都被转换成等价的十六进制。e、 g str = "ABCD" 我正在努力使我的输出更准确 array('B', [41, 42, 43, 44]) 有没有一种简单的方法可以实现这一点?encode函数可以帮助您,encode返回字符串的编码版本 In [44]: str = "ABCD" In [45]: [elem.encode("hex") for elem in str] Out[45]

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

str = "ABCD"
我正在努力使我的输出更准确

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

有没有一种简单的方法可以实现这一点?

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])
如果您想要十六进制:

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)

参考:

对于Python3,它适用于@HYRY发布的内容。我需要它来处理dbus.array中返回的数据。这是唯一有效的方法

s = "ABCD"
从数组导入数组

a = array("B", s)

这在Python 2和Python 3中都适用:

>>> 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. 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)
以下验证是在Python3.7中完成的

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

你想要的是不可能的,至少在这种形式下是不可能的。类型为
B
的bytearray包含1字节整数,它们始终以十进制表示。但是,正如您所看到的,,,array module提供了字符串元素的ascii值,该值与预期输出不匹配。这是可接受的答案,在Python3中不起作用。你能添加其他答案中提到的蟒蛇3版本吗?@KevanAhlquist我的错。现在修复了它。对于Python 3,这看起来更清晰:
s=“ABCD”
b=bytearray()
b.extend(s.encode())
关于,它返回一个字节对象,该对象自然地扩展了bytearray。
map(ord,s)
将返回值>255,除非字符串是严格的ASCII。请更新您的答案以包含类似于
s.encode('utf-8')
的内容。(请注意,UTF-8是ASCII的严格超集,因此它不会以任何方式更改ASCII字符串。)@9000使用
.encode()
以及
.encode('UTF-8')
是不正确的。如果不想转换字节,请使用
map(ord,…)
。只需按
run
并查看结果。在repl.it中不起作用。返回:“TypeError:无法使用str初始化类型代码为“B”的数组”
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)
>>> s="ABCD"
>>> encoded=s.encode('utf-8')
>>> encoded
b'ABCD'
>>> array=bytearray(encoded)
>>> array
bytearray(b'ABCD')