[완료] 비트필드 엔디안문제 때문에 글 올립니다...

dnghqls의 이미지

패킷 헤더 파싱 과제를 하고 있는데요...

그 파싱할 IP헤더의 구조체를 이렇게 만들었습니다.

typedef struct {
 unsigned char ver : 4, hlen :4;
...
...

이렇게 한후 IP헤더부분을 통째로 fread 하였습니다...

문제는 엔디안 같은데요.

unsigned short, int는 ntohs나 ntohl써서 해결했습니다... 근데 저 1바이트를 읽어올때도 비트필드가 설정되어 있으면...

엔디안이 적용되나요?

45가 54로(ver: 5, hlen: 4) 되는것 같습니다.

cwryu의 이미지

C에서 bit field가 상위/하위 중에 어느 비트에 들어가야 된다는 규칙은 없는데요. 관행적으로 먼저 쓴 비트가 LSB입니다. (endian에 관계없이)

ipv4 헤더에서 먼저 나오는 비트는 MSB입니다.

Hyun의 이미지

비디오 스트림을 분석하거나 하는 쪽에 보면 구조체를 엔디안별로 두개씩 선언해놓고 쓰더군요.
http://kldp.org/node/75216#comment-436708
요렇게요...


나도 세벌식을 씁니다