On Thu, 8 Apr 2010, Michael Davidson wrote: > Your modern compiler is almost certainly inserting two bytes of padding > after ar_name[] > so that the int32_t ar_date is aligned on a 4 byte boundary - that shifts > everything else > down by 2 bytes and means that ar_size lines up with the last 2 bytes of the > size in > the header which, as luck would have it, is the low order 16 bits of the > size as it would > have been stored in a 32 bit long. > > Something like this should work on a modern little endian processor" > > struct { >         char    ar_name[14]; >         int16_t ar_date_16_31; >         int16_t ar_date_00_15; >         char    ar_uid; >         char    ar_gid; >         uint16_t        ar_mode; >         uint16_t        ar_size_16_31; >         uint16_t        ar_size_00_15; > } ar_buf; Thank you! That works for me! I can now get correct sizes, names, and data. I will clean up my little ar extractor over the next few days and share it.