【问题标题】:Convert a list of integers to a bytearray in Python在 Python 中将整数列表转换为字节数组
【发布时间】:2015-12-06 12:51:34
【问题描述】:

我是 Python 的新手(C 是我的主要语言),所以这可能是一个超级基础/幼稚的问题。

我有两个使用以下 Python 代码生成的整数列表:

mainList = range(100)
random.shuffle(mainList)
list1 = mainList[:len(mainList)/2]
list2 = mainList[len(mainList)/2:]

基本上,我正在尝试通过 TCP 连接发送每个列表(list1list2),并且我想确保我只为每个列表发送一个 50 字节的有效负载(每个列表包含 50 个整数)。

最好的方法是什么? bytearray() 函数是否适用于此?

【问题讨论】:

标签: python list python-2.7 python-3.x bytearray


【解决方案1】:

您可以使用以下方法。首先使用 Python 的 struct 模块将整数列表打包成二进制,每个整数使用 4 个字节。 I 指定所需的大小,因此如果您的整数只是字节值,您可以将其更改为 B

zipiter 然后用于从字节列表中一次抓取 50 个字节。这意味着你可以把它做成任何你喜欢的长度:

import random
import struct

main_list = range(100)
random.shuffle(main_list)

# 'I' meaning unsigned int of 4 bytes
bytes = struct.pack("{}I".format(len(main_list)), *main_list)

for send_50 in zip(*[iter(bytes)]*50):
    print len(send_50)

使用 Python 2.7 测试

【讨论】:

  • 这是常用的成语吗?我花了几分钟才弄清楚它是如何工作的,如果我在代码中遇到它,我想我会感到困惑。
  • 比较常见,基于grouperrecipe
  • 谢谢!我什至不知道那些 itertools 食谱;你可以在一天之内学习一些关于 python 的新知识。
  • 谢谢,马丁!在在 Py 文档中查找它们之前,您的回答肯定让我对 struct.pack() 和 zip() + iter() 有了很好的了解。另外,您的方法比我想象的要简洁得多!迫不及待地想了解更多,因为我跟着语言一起去。再次感谢。
猜你喜欢
  • 2014-10-17
  • 2022-11-14
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多