2013-11-23 61 views
0

我有以下代碼:C編程:IP報頭ID爲負

struct ip_header { 
     unsigned char ip_hl:4; 
     unsigned char ip_ver:4; 
     unsigned char ip_dscp:6; 
     unsigned char ip_ecn:2; 
     short ip_len; 
     short ip_id; 
... 
}; 
... 

const struct ip_header * ip_hdr = (const struct ip_header *)(buffer + ETHERNET_HEADER_SIZE); 

... 

printf("IP ID: %d", ip_hdr->ip_id); 

IP ID我得到的是否定了大部分的數據包。你們可以看到一個錯誤嗎?

回答

0

%d打印一個有符號整數(所以在這裏它將你的無符號整數轉換成一個有符號整數)。使用%u作爲無符號整數。

+0

由於ip_id很短,我相信%hu是一個更好的選擇。 – Cahu

+0

感謝提示,我不應該在第一個地方使用短IP ID。現在,當我使用%u時,所有數據包的ID均爲1600。你認爲這是正常的嗎?每個數據包不應該不同嗎? – maximilliano