将字节字符串列表转换为字节数组(字节流)

3

我有一个十六进制字符串列表,格式为"FF",代表字节。我想将整个列表转换为字节流,以便通过套接字发送它(使用Python 3)。它看起来bytearray类型会起作用,但我找不到任何直接将列表转换为bytearray的方法。

我可以在循环中手动完成此操作,但认为必须有更好的Python方法来做到这一点。

3个回答

3
hexstrings = ["DE", "AD", "BE", "EF"]   # big-endian 0xDEADBEEF

bytes = bytearray(int(x, 16) for x in hexstrings)
bytes = bytearray.fromhex("".join(hexstrings))     # Python 2.6 may need u""

如果你有很多东西,那么看看哪一个最快可能是值得的。

第一个代码注释:0xDEADBEEF是一个整数,仅在大端机器上与hexstrings相关。第二个代码注释:你的代码可以在Python 2.7中正常工作,而无需更改;但如果要让它在早期版本上运行,比如Python 2.1到2.7,就需要进行重大手术,例如"".join([chr(int(x, 16)) for x in hexstrings])将完成这项工作。 - John Machin
第一个评论只是为了在十六进制中写入“Ox Dead Beef”,但你在技术上是正确的 - 这是最好的正确方式!而“大端 Ox Dead Beef”甚至更有趣。 :-) 在第二个评论中,实际上是Python 2.6 坚持在那里使用Unicode字符串,但这似乎是一个错误。2.7 的行为与您所述相同,我已经进行了更改。(仅供参考,bytearray 是在2.6中引入的。) - kindall

1
hexlist = ["a9", "00", "85", "c6"]
ba = bytearray(h.decode("hex") for h in hexlist)

另请参阅bytearray.fromhex:

bytearray.fromhex(string) -> bytearray

从十六进制数字字符串创建一个bytearray对象。两个数字之间的空格是被接受的。例如: bytearray.fromhex('B9 01EF') -> bytearray(b'\xb9\x01\xef')。


-1

参考:

char* PyByteArray_AsString(PyObject *bytearray) 在检查空指针后,将bytearray的内容作为char数组返回

来自Python文档参考


我想要走另一个方向。 - Lance Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接