2012-03-04 3 views
0

내가 비주얼 C에서이 구조체를 사용하려면 ++에서 문제 :비트 필드의 Visual C++

struct iphdr 
{ 
    unsigned int ihl:4; 
    unsigned int version:4; 

    u_int8_t tos; 
    u_int16_t tot_len; 
    u_int16_t id; 
    u_int16_t frag_off; 
    u_int8_t ttl; 
    u_int8_t protocol; 
    u_int16_t check; 
    struct in_addr ip_src; 
    struct in_addr ip_dst; 

}; 

그러나 디버깅 나는 20 될 것으로 예상 sizeof(struct iphdr) = 24을 발견하고 내가 교체 할 때하는 것이 이상하다 ihlversionchar와, sizeof(struct iphdr) = 20

+0

32 비트 또는 64 비트 컴파일러에서 컴파일하고 있습니까? –

+1

일반적인 구조체 맞춤/패딩 것 이상의 의미가있는 것 같습니다. – Mysticial

+0

@izomorphius 아니요, 32 비트 컴파일러이고 vC++ 2008을 사용하고 있습니다 – Javran

답변

1

비트 필드 ihlversion (그들은 캐릭터에 맞는 것이라는 사실에도 불구하고)를 unsigned int 필드에 배치됩니다 . 따라서 필드 tos은 패딩으로 인해 오프셋 4에 배치되고, 오프셋 6에 tot_length이 배치됩니다.

+0

와우, ihl과 u_int8_t 버전이 바뀌고 작동합니다! – Javran

관련 문제