Python:struct module打包整数数组

时间:2014-04-12 20:26:17

标签: python c

在打包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次并相应地初始化值。有没有办法像我们的char那样避免这种情况。

如果我有char sam [512],我们可以使用512s,有些类似于此,我正在寻找。我正在使用python 2.4

512I建议有效,但我应该如何初始化数组。我不认为我必须输入512个整数,如array_values =(1,1,1,1 ......高达512),肯定应该有一些方法来做到这一点。如果我使用数组,我会收到错误,说整数是预期的。

1 个答案:

答案 0 :(得分:4)

struct documentation中有一种方法可以做到。

  

格式字符可以在整数重复计数之前。例如,格式字符串'4h'表示与'hhhh'完全相同。

所以在代码中 - 它看起来像:

# test_values is a list of 512 integers
vaultmap = struct.pack('512I',*test_values)

但请注意,与字符串不同,所有512都是独立的数字(不是单个数组的一部分)。您可以使用python操作稍后将它们视为数组。

  

对于's'格式字符,计数被解释为字符串的大小,而不是像其他格式字符那样的重复计数;