class StructuredData( object): def __init__( self, format, members, buf, offset): self.buf = buf self.format = "<" + format # little-endian self.members = members self.offset = offset # determine size of structured data self.size = struct.calcsize( self.format) # unpack structured data according to the specified format into a tuple data = struct.unpack( self.format, buf[ self.offset: self.offset + self.size]) # use the tuple of member names and the tuple of values to create members of this class map( lambda ( member, value): setattr( self, member, value), zip( self.members, data)) def dump( self): values = map( functools.partial( getattr, self), self.members) packer = functools.partial( struct.pack, self.format) for value in values: packer = functools.partial( packer, value) return packer()