Eric Jacoboni wrote: > Hi, > > To experiment with unpacking, i've written a little C code which > stores one record in a file. Then, i try to reread this file to unpack > the record. > > Here's the struct of a record: > > typedef struct { > char nom[30]; > double taille; > int age; > char plop; > } enreg_t; > > The whole size, as given by sizeof() is 48, due to byte alignment. > ...i've tried "32sdicxxx" to reach the 48 expected... Now it works... > > The same file, re-read with a Ruby script needs a > str.unpack("Z32dIc"). > > So, i don't know why i need to pad the format string in Python. Any > clue? > > BTW: how to get rid of all this stuff after the \0 in the first field > in Python? (Ruby has Z and A, but it seems that the Python 's' > specifier is like 'A' and there is no 'Z' equivalent)
OK, the correct translation of your format is: '30sdic' (size 45) or '30sdic3x' if you are passing the entire 48-char block. The reason it is not size 48 is that '30sdicc' (size 46) in C takes no more room. the alignment to the end shows up in a C sizeof. data = struct.pack('30sdic', 'John Q. Public', 57123.25, 43, 'M') nomz, taille, age, plop = struct.unpack('30sdic', data) nom = nomz.rstrip('\0') --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list