Problem with 'struct' module
grante at visi.com
Tue Jun 14 16:24:56 CEST 2005
On 2005-06-14, Matt Feinstein <nospam at here.com> wrote:
> Using the 'struct' module (Win32, python version 2.4.1)--
> The library documentation says that 'no alignment is required
> for any type'.
Right. It says that for Standard alignment, and that's correct.
> However, struct.calcsize('fd') gives 16 while
> struct.calcsize('df') gives 12, implying that double precision
> data has to start on a double-word boundary.
Your example is not using standard alignment. It's using
By default, C numbers are represented in the machine's native
format and byte order, and properly aligned by skipping pad
bytes if necessary (according to the rules used by the C
Alternatively, the first character of the format string can
be used to indicate the byte order, size and alignment of
the packed data, according to the following table:
Character Byte order Size and alignment
@ native native
= native standard
< little-endian standard
> big-endian standard
! network (= big-endian) standard
If the first character is not one of these, "@" is assumed.
Native byte order is big-endian or little-endian, depending
on the host system. For example, Motorola and Sun
processors are big-endian; Intel and DEC processors are
Native size and alignment are determined using the C compiler's
sizeof expression. This is always combined with native byte
Standard size and alignment are as follows: no alignment is
required for any type (so you have to use pad bytes); short is
2 bytes; int and long are 4 bytes; long long (__int64 on
Windows) is 8 bytes; float and double are 32-bit and 64-bit
IEEE floating point numbers, respectively.
Note the difference between "@" and "=": both use native
byte order, but the size and alignment of the latter is
Grant Edwards grante Yow! ... I want FORTY-TWO
at TRYNEL FLOATATION SYSTEMS
visi.com installed withinSIX AND A
More information about the Python-list