On May 20, 5:59 pm, Robert Kern <[EMAIL PROTECTED]> wrote:
> Ethan Furman wrote:
> > Greetings,
>
> > I'm looking at the struct module for binary packing of ints and floats.  
> > The documentation refers to C datatypes.  It's been many years since I
> > looked at C, but I seem to remember that the data type sizes were not
> > fixed -- for example, an int might be two byes on one machine, and four
> > bytes on the next.  Can any C programmers verify this?  If it is true,
> > does that mean that struct.pack('h', 8001) might give me different
> > results depending on the machine it's running on?
>
> Right. I believe (but could be wrong) that "char" is defined to be one byte, 
> but
> that "short", "int", "long", and "long long" are defined as "at least as big 
> as
> the previous type".

There are also minimum sizes for each type:

char: 8 bits
short: 16 bits
int: 16 bits
long: 32 bits
long long: 64 bits

> In practice, though, on nearly every machine that Python runs on, "char" is 
> one
> byte, "short" is two bytes, and "int" is four bytes. "longs" and "long longs"
> tend to vary substantially, though; never assume sizes for them.
>
> Single-precision floats are always four bytes and double-precision floats are
> always eight bytes. "long doubles" vary; they could be twelve bytes or 
> sixteen.
>
> If you want to deal with fixed sizes, use struct.calcsize() to test the sizes 
> of
> each of the integer types, assign them to width-specific aliases, and always 
> use
> these aliases.

Also, according to the documentation for the struct module, the =, <,
and > format characters specify "std. size" rather than "native size".
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to