[PD-dev] examples of porting endianness?

Mathieu Bouchard matju at sympatico.ca
Wed Feb 26 08:15:53 CET 2003


On Wed, 26 Feb 2003, Hans-Christoph Steiner wrote:

> In effort to learn how to port stuff to MacOS X, I was hoping someone 
> could point me to a piece of code where endianness is an issue and has 
> been ported to PowerPC.  I always learn best by following an good 
> example.


suppose you have:

   char data[4]; /* float data directly from a file */

then this is wrong:

   *(float *)data

you have to do this:

1. "convert" to native integer

   1.1. from little-endian:
        int x = data[0] | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
        
   1.2. from big-endian:
        int x = data[3] | (data[2]<<8) | (data[1]<<16) | (data[0]<<24);

2. "convert" to float
   *(float *)&x

this works in similar fashion for reading other number types, except for
"short" the formulas are shorter, and for "double" and "long long" the
formulas are longer. step 1 needs to be done on an integer type of the
same size as the data. step 2 is useless if desired result is an integer
type...



GridFlow has been tested on a few bigendians: Sun, SGI, Mac. However I
fear the code I'd extract from it wouldn't be too obvious. I hope the
above explanation is sufficient.



________________________________________________________________
Mathieu Bouchard                       http://artengine.ca/matju






More information about the Pd-dev mailing list