Python:struct模块打包整数数组
在打包结构体的时候,我通常会这样做:
假设我有一个结构体,内容是:
struct test {
unsigned int Id;
unsigned int Member1;
unsigned int Member2[2];
unsigned int Member3[3];
};
test_values = (1,20,1,2,3,4,5)
vaultmap = struct.pack('IIIIIII',*test_values)
这种方法在数组比较小的时候还可以,但如果数组的大小变得很大,比如说512,我发现这种方法就有点麻烦了,因为我得写512次,并且相应地初始化这些值。有没有什么办法可以避免这样,就像我们处理字符数组一样。
比如说,如果我有一个字符数组 sam[512],我们可以用512s来表示,我想找的就是类似这样的方式。我现在使用的是Python 2.4。
我试过用512I的方法,这个可以用,但我该怎么初始化这个数组呢?我觉得我不需要输入512个整数,比如 array_values = (1,1,1,1 ...... 一直到512),肯定有更简单的方法。如果我使用数组,系统会报错说需要一个整数。
1 个回答
7
在struct
的文档中,有一种方法可以做到这一点。
格式字符前面可以加一个整数来表示重复次数。例如,格式字符串 '4h' 和 'hhhh' 是完全一样的。
在代码中,它看起来像这样:
# test_values is a list of 512 integers
vaultmap = struct.pack('512I',*test_values)
不过要注意,和字符串不同的是,所有的512个数字都是独立的(并不是一个单一数组中的元素)。你可以使用Python的操作把它们当作数组来处理。
对于's'格式字符,计数是表示字符串的大小,而不是像其他格式字符那样的重复次数;