【问题标题】:Convert list of byte strings to bytearray (byte stream)将字节字符串列表转换为字节数组(字节流)
【发布时间】:2011-12-05 07:23:48
【问题描述】:

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

我可以在循环中手动执行此操作,但认为必须有更好的 Python 方法来执行此操作。

【问题讨论】:

    标签: python python-3.x bytearray


    【解决方案1】:
    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 的工作。
    • 第一条评论只是一个用十六进制写“Ox Dead Beef”的机会,但你在技术上是正确的——最好的一种正确!而“大端牛死牛肉”可以说更有趣。 :-) 其次,实际上是 Python 2.6 坚持在那里有一个 Unicode 字符串,但这似乎是一个错误。 2.7 的行为如你所说,我已经改变了。 (bytearray 是在 2.6 中引入的,仅供记录。)
    【解决方案2】:
    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')。

    【讨论】:

      【解决方案3】:

      参考:

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

      来自python doc reference

      【讨论】:

      • 我正在寻找另一个方向。
      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2016-05-05
      相关资源
      最近更新 更多