【发布时间】:2011-12-05 07:23:48
【问题描述】:
我有一个表示字节的十六进制字符串列表,格式为“FF”。我想将整个列表转换为字节流,以便可以通过套接字(Python 3)发送它。看起来 bytearray 类型可以工作,但我找不到任何方法可以直接将列表转换为 bytearray。
我可以在循环中手动执行此操作,但认为必须有更好的 Python 方法来执行此操作。
【问题讨论】:
标签: python python-3.x bytearray
我有一个表示字节的十六进制字符串列表,格式为“FF”。我想将整个列表转换为字节流,以便可以通过套接字(Python 3)发送它。看起来 bytearray 类型可以工作,但我找不到任何方法可以直接将列表转换为 bytearray。
我可以在循环中手动执行此操作,但认为必须有更好的 Python 方法来执行此操作。
【问题讨论】:
标签: python python-3.x bytearray
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 是一个整数,仅在 bigendian 机器上与 hexstrings 相关。第二条代码注释:您的代码无需更改即可与python 2.7一起使用;它需要大手术才能使其在早期版本上工作,例如"".join([chr(int(x, 16)) for x in hexstrings]) 将完成 Python 2.1 到 2.7 的工作。
bytearray 是在 2.6 中引入的,仅供记录。)
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')。
【讨论】:
参考:
char* PyByteArray_AsString(PyObject *bytearray) 检查 NULL 指针后,将 bytearray 的内容作为 char 数组返回
【讨论】: