tcpdump mailing list archives
Re: Byte Order
From: Guy Harris <guy () alum mit edu>
Date: Wed, 30 Jul 2003 23:25:15 -0700
On Wed, Jul 30, 2003 at 02:28:41AM -0700, Muhammad Farooq-i-Azam wrote:
I think I can define a structure as below for the
fixed part of the header:
typedef struct header_ripv1 {
u_int8_t command;
u_int8_t version;
u_int16_t zeros;
} header_ripv1_t;
My question is can I use the above structure for both
little endian and big endian systems with the only
conversion required below:
header_ripv1_t ripv1;
ripv1.zeros = ntohs(ripv1.zeros);
Yes.
Or do I have to do something like this (which I
*doubt* has a double error, and will result in
problems on a big endian system):
typedef struct header_ripv1{
#if defined (WORDS_BIGENDIAN)
u_int16_t zeros;
u_int8_t version;
u_int8_t command;
#else
u_int8_t command;
u_int8_t version;
u_int16_t zeros;
#endif
} header_ripv1_t;
No. The byte-order issue is only an issue of the order of the bytes
within a multi-byte numerical quantity; it isn't an issue of the order
of the bytes within a structure. ANSI C, as I remember, specifies that,
with a structure like
typedef struct header_ripv1 {
u_int8_t command;
u_int8_t version;
u_int16_t zeros;
} header_ripv1_t;
"command" is in the first location, followed by "version", followed by
"zeroes".
-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe
Current thread:
- Byte Order Muhammad Farooq-i-Azam (Jul 30)
- Re: Byte Order Guy Harris (Jul 31)
