在数组中使用python的包

2024-10-03 09:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用struct模块中的pack函数将数据编码成网络协议所需的格式。我遇到了一个问题:除了8位字符之外,我看不到任何编码数组的方法。在

例如,要对“TEST”进行编码,我可以使用格式说明符“4s”。但是如何对32位整数或其他非字符串类型的数组或列表进行编码呢?在

这是一个具体的例子。假设我有一个函数doEncode,它接受一个32位值的数组。协议需要一个32位长度的字段,后跟数组本身。这是我目前所能想到的。在

from array import *
from struct import *

def doEncode(arr):
    bin=pack('>i'+len(arr)*'I',len(arr), ???)

arr=array('I',[1,2,3])
doEncode(arr)

我所能想到的最好的方法就是从数组的长度动态生成一个压缩字符串的格式。有没有某种方法可以指定我有一个数组,这样我就不需要这样做了,就像字符串一样(例如,pack('>i'+len(arr)+'s')?在

即使使用上述方法,我也不确定如何以类似的动态方式传递数组中的元素,也就是说,我不能只说, arr[0], arr[1], ...,因为我不知道提前知道长度。在

我想我可以将数组中每个单独的整数打包成一个循环,然后将所有结果连接在一起,但这看起来像是一种黑客行为。有更好的方法吗?array和struct模块似乎都在做它们自己的事情,但在本例中,我要做的是两者的结合,这两个模块都不想做。在


Tags: 模块方法函数字符串from编码len格式