Boost logo

Boost :

From: Marco Manfredini (marco_at_[hidden])
Date: 2000-03-10 16:37:09


Heeee. You stole it from me :-)

No, honestly, the trick works very good for me! It is very useful to read
file formats in different or mixed endian orders (such strange stuff
exists!), you only need to declare a structure with the endian'ed ints and
you read the data completly transparent. Even from a memory-mapped file:

// Such strange looks an ESRI ArcView shapefile header...
struct shp_file_header
        {
        big_long file_code; // == 9944
        big_long unused_a[5];
        big_long file_length; // Anzahl der 16-Bit worte.
        lit_long version; // ==1000
        lit_long shape_type; //
        geo_rect<lit_double> bounds;
        lit_long unused_b[8];
        };

In my code, I swapped the endians with unions, I think it makes it easier to
see, what actually happens:

static inline unsigned long endswap (unsigned long v)
        {
        union { unsigned long x; unsigned char b[4]; } s,d;
        s.x=v;

        d.b[0] = s.b[3];
        d.b[1] = s.b[2];
        d.b[2] = s.b[1];
        d.b[3] = s.b[0];
        return d.x;
        }

One point: If I'm not utterly wrong, then IEEE's (though hard to believe)
have a big and a little endian representation. Does someone knows more?

Greetings
- Marco


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk