> first, second, third, fourth, fifth, ..... = struct.unpack > ("iiIIiIiiILllfd", data) > > It is SO EASY to screw this up. Pick the wrong type code, or > misalign the type and field. It needs to look more like something sane: > > class Point(struct.BigEndianStruct): > x = struct.SInt32() > y = struct.SInt32()
Why not (for yourself) just add a module which addresses some of this? As in: from unpacking import * def getPoint (bvar): unpack = unpacking(bvar) x = unpack(S_INT_32) y = unpack(S_INT_32) ============================== unpacking.py ============================ import struct S_INT_32 = "i" U_INT_32 = "I" ## ... etc. ... class unpacker: def __init__(self, bdata): if type(bdata) != type(''): raise ValueError("type of bdata (%s) should be simple str" % bdata) self.bdata = bdata def unpack(self, typespec): if not self.bdata: raise ValueError("data source exhausted") if len(self.bdata) > 0: valsize = struct.calcsize(typespec) if len(self.bdata) < valsize: raise ValueError("data source exhausted") val = struct.unpack(typespec, self.bdata[:valsize]) self.bdata = self.bdata[valsize:] return val def unpacking(bdata): return (lambda x, y=unpacker(bdata): y.unpack(x)) _______________________________________________ Pythonmac-SIG maillist - Pythonmac-SIG@python.org http://mail.python.org/mailman/listinfo/pythonmac-sig