Найти в Дзене
Q-ANSWER.RU

Извлечение битового поля со структурой и порядком байтов в C

Мне нужно уточнить, как порядок байтов влияет на поле извлечения битов в C-структуре. Следующая структура объявляет заголовок rtp: typedef struct {
#if BYTE_ORDER == BIG_ENDIAN
unsigned int version:2; /* protocol version */
unsigned int p:1; /* padding flag */
unsigned int x:1; /* header extension flag */
unsigned int cc:4; /* CSRC count */
unsigned int m:1; /* marker bit */
unsigned int pt:7; /* payload type */
#else
unsigned int cc:4; /* CSRC count */
unsigned int x:1; /* header extension flag */
unsigned int p:1; /* padding flag */
unsigned int version:2; /* protocol version */
unsigned int pt:7; /* payload type */
unsigned int m:1; /* marker bit */
#endif
unsigned int seq:16; /* sequence number */
uint32_t ts; /* timestamp */
uint32_t ssrc; /* synchronization source */
uint32_t csrc[0]; /* optional CSRC list */
} rtp_hdr_t;
Из-за того, что порядок байтов


Мне нужно уточнить, как порядок байтов влияет на поле извлечения битов в C-структуре.

Следующая структура объявляет заголовок rtp:

typedef struct {
#if BYTE_ORDER == BIG_ENDIAN
unsigned int version:2; /* protocol version */
unsigned int p:1; /* padding flag */
unsigned int x:1; /* header extension flag */
unsigned int cc:4; /* CSRC count */
unsigned int m:1; /* marker bit */
unsigned int pt:7; /* payload type */
#else
unsigned int cc:4; /* CSRC count */
unsigned int x:1; /* header extension flag */
unsigned int p:1; /* padding flag */
unsigned int version:2; /* protocol version */
unsigned int pt:7; /* payload type */
unsigned int m:1; /* marker bit */
#endif
unsigned int seq:16; /* sequence number */
uint32_t ts; /* timestamp */
uint32_t ssrc; /* synchronization source */
uint32_t csrc[0]; /* optional CSRC list */
} rtp_hdr_t;

Из-за того, что порядок байтов влияет на порядок следования байтов в памяти, я с трудом понимаю, почему структура определяется таким образом в архитектуре с прямым порядком байтов

Спасибо