2016-04-28 13 views
1

so habe ich Probleme sezieren eine IPV4-Header. Insbesondere habe ich Probleme beim Lesen des ID-Teils.Ausgabe lesen und Drucken IP-Header-ID in c

Ich folge diesem Bild. IPV4Header

Und ich lese die gesamte IPv4-Paket fread verwenden und es in ein Array von Zeichen wie so

 unsigned char buffer[2048] = ""; 
    fread(buffer, 1, 20, file); 

nun nach diesem Bild Speicherung der ID sollte die 5. und 6. Byte sein.

Also versuche ich es in ein unsigned char zu speichern und drucken, wie so

unsigned char id = buffer[4] + buffer[5] 
printf("Identification: 0x%X (%d)\n", id, id); 

Aber ich den falschen Wert zu bekommen. Und ich bin mir nicht sicher, was ich falsch mache. Jede Hilfe würde sehr geschätzt werden.

Ich lese fälschlicherweise auch einige andere Teile der Kopfzeile, hoffentlich herauszufinden, das hilft mir, den Rest herauszufinden.

Antwort

0

Die ID ist zwei Byte lang, Sie müssen also einen Integer-Typ verwenden, der groß genug ist, um beide Bytes zu enthalten. Wenn Sie sie zusammenfügen, erzielen Sie nicht das gleiche Ergebnis.

unsigned short id = (buffer[4] << 8) | buffer[5]; 
printf("Identification: 0x%hx (%hu)\n", id, id); 
+0

Danke, das hat wirklich geholfen! – Pants