[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: int vs. struct
Yes, any ADT that is to be saved on disk or transmitted over the net (or
given any other external form) should have a conversion from host byte
order (and FP format, &c) to network byte order (&c).
This problem also exists with non-struct/non-OOP interfaces.
Dave Dyer wrote:
>
> I should point out that in C, any "standard interface" based on structs
> is fraught with peril unless it is rigourously adhered to, and that if
> the interface includes a networking substrate, it is essential that the
> exact byte sequences be specified.
>
> For example:
>
> struct point { short x;short y; };
>
> will, in byte terms, store x and y in multiple different ways, depending
> on the endian class of the machine, and on the whim of the C compiler.
>
> defining
> #define x_from_point(i) ((short)(i>>16))
> #define y_from_point(i) ((short)(i&0xffff))
> #define point(x,y) ((x<<16)|(y&0xffff))
>
> is safe locally
>
> both possible definitions will be non-portable across networks and file
> systems unless the protocol for transmitting a point is specified (and
> adhered to) as a sequence of bytes. For example, writing an array of
> "points", or a "point" embedded in a larger struct, will not be portable
> using simple code such as:
>
> write(stream,&a_point,4);