struct.unpack() on a stream

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri Feb 27 13:58:51 CET 2009


En Fri, 27 Feb 2009 10:10:39 -0200, MRAB <google at mrabarnett.plus.com>  
escribió:

> Gabriel Genellina wrote:
>> En Fri, 27 Feb 2009 09:29:16 -0200, Ulrich Eckhardt  
>> <eckhardt at satorlaser.com> escribió:
>>
>>> I have a socket from which I would like to parse some data, how would  
>>> I do
>>> that? Of course, I can manually read data from the socket until  
>>> unpack()
>>> stops complaining about a lack of data, but that sounds rather  
>>> inelegant.
>>>
>>> Any better suggestions?
>>  Read until you get the required bytes; use the size attribute.
>>
> The struct module has a function called "calcsize", eg:
>
>  >>> import struct
>  >>> struct.calcsize("<H")
> 2
>
> That will tell you how many bytes to read.

The struct module defines also a Struct class; instead of using the module  
functions, it's more efficient to create a Struct instance and call its  
methods when one is going to use the same format more than once:

py> s = struct.Struct("<H")
py> s.size
2
py> s.unpack("\x40\x00")
(64,)

That's the size attribute I was talking about - too tersely perhaps.

-- 
Gabriel Genellina




More information about the Python-list mailing list