so how do I do it? (was Re: call to revolt)
Peter da Silva
peter at ficc.ferranti.com
Sat Jun 29 03:32:22 AEST 1991
In article <m0jspJY-0001ieC at shiva.reed.edu> minar at reed.edu writes:
> I'm writing some code right now that needs to extract information from a
> buffer that contains various types in it.
> Lets say that there's a chunk of memory that
> I *know* first contains a char, then an unsigned. I want to get these values.
Option 1: define a structure for the buffer. This will automatically handle
alignment requirements and the like.
Option 2: If the buffer is packed, or imported, you will have to step
through it byte by byte:
char *bufp;
unsigned u;
char c;
bufp = buffer;
c = *bufp++;
u = *bufp++ << bitsperchar;
u |= *bufp++;
Or, if the buffer is little-endian:
c = *bufp++;
u = *bufo++;
u |= *bufp++ << bitsperchar;
> this is nonportable, as to my understanding, as struct arrangements are not
> guaranteed.
No, that's portable. Structs are guaranteed to be in increasing order. Padding
is undefined, as is byte order within a word.
> while I'm at it, how do you get the offset of an element of a structure
> the ANSI way?
Use the offsetof() macro.
--
Peter da Silva; Ferranti International Controls Corporation; +1 713 274 5180;
Sugar Land, TX 77487-5012; `-_-' "Have you hugged your wolf, today?"
More information about the Comp.std.c
mailing list