[BangPypers] pack data

Noufal Ibrahim noufal at gmail.com
Fri May 28 09:26:59 CEST 2010


On Fri, May 28, 2010 at 12:49 PM, murugadoss <murugadoss2884 at gmail.com> wrote:
> Hello all,
>
> I am trying a sample program for send set of data [ kept in array]. I have
> attached the code below,
>
> import struct
>
> sendvalues = [181, 98, 11, 01]
> for i in range(4):
> snddata = struct.pack('int',int(sendvalue[i]))
> sendto(sndData,("localhost"))


'int' is not a valid struct.pack format specifier. You'll have to say
'i'. Since you have 4 arguments (all signed integers), you'll have to
say 'i'*4.

Something like

  struct.pack('i'*4, *sendvalues)

will pack all four integers into a string. The * before sendvalues it
to unpack the list into arguments. You can send it then. If you want
to send it int by int, you can put

  snddata = struct.pack('i', sendvalue[i])

in your loop (the int constructor is redundant since all the elements
are integers anyway).

Also, you wouldn't use "for i in range(4)" to loop through a list in
Python. You'd say

  for i in sendvalues:
     snddata = struct.pack('i', i)
     ...


> i am getting error as,
>
> Traceback (most recent call last):
>  File "./clientudp.py", line 10, in <module>
>    snddata = struct.pack('hhl',sendvalue[i])
>  File "/usr/local/lib/python2.5/struct.py", line 63, in pack
>    return o.pack(*args)
> struct.error: pack requires exactly 3 arguments

This is somewhat fundamental. Are you sure you read
http://docs.python.org/library/struct.html before trying this? If not,
you know what to do. :)


-- 
~noufal
http://nibrahim.net.in


More information about the BangPypers mailing list