Using python's pack with arrays
Question: I'm trying to use the pack function in the struct module to encode data into
formats required by a network protocol. I've run into a problem in that I
don't see any way to encode arrays of anything other than 8-bit characters.

For example, to encode "TEST", I can use format specifier "4s". But how do I
encode an array or list of 32-bit integers or other non-string types?

Here is a concrete example. Suppose I have a function `doEncode` which takes
an array of 32-bit values. The protocol requires a 32-bit length field,
followed by the array itself. Here is what I have been able to come up with so
far.

    
    
    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)
    

The best I have been able to come up with is generating a format to the pack
string dynamically from the length of the array. Is there some way of
specifying that I have an array so I don't need to do this, like there is with
a string (which e.g. would be `pack('>i'+len(arr)+'s'`)?

Even with the above approach, I'm not sure how I would go about actually
passing the elements in the array in a similar dynamic way, i.e. I can't just
say `, arr[0], arr[1], ...` because I don't know ahead of time what the length
will be.

I suppose I could just pack each individual integer in the array in a loop,
and then join all the results together, but this seems like a hack. Is there
some better way to do this? The array and struct modules each seem to do their
own thing, but in this case what I'm trying to do is a combination of both,
which neither wants to do.


Answer: 
    data = pack('>i', len(arr)) + arr.tostring()
    

