问题读取和打印 ip header ID in c
Issue reading and printing ip header ID in c
所以我在剖析 IPV4 header 时遇到了问题。特别是我无法读取 ID 部分。
我正在关注这张图片。
IPV4Header
我正在使用 fread 读取整个 ipv4 数据包并将其存储到一个字符数组中,就像这样
unsigned char buffer[2048] = "";
fread(buffer, 1, 20, file);
现在根据那个图像 ID 应该是第 5 个和第 6 个字节。
所以我尝试将它存储到一个 unsigned char 中并像这样打印
unsigned char id = buffer[4] + buffer[5]
printf("Identification: 0x%X (%d)\n", id, id);
但是我得到了错误的值。而且我不确定我做错了什么。
任何帮助将不胜感激。
我也读错了 header 的其他几个部分,希望弄清楚这一点会帮助我弄清楚其余部分。
ID 的长度为两个字节,因此您必须使用足够大的整数类型来容纳两个字节。将它们相加并不能达到相同的结果。
unsigned short id = (buffer[4] << 8) | buffer[5];
printf("Identification: 0x%hx (%hu)\n", id, id);
所以我在剖析 IPV4 header 时遇到了问题。特别是我无法读取 ID 部分。
我正在关注这张图片。 IPV4Header
我正在使用 fread 读取整个 ipv4 数据包并将其存储到一个字符数组中,就像这样
unsigned char buffer[2048] = "";
fread(buffer, 1, 20, file);
现在根据那个图像 ID 应该是第 5 个和第 6 个字节。
所以我尝试将它存储到一个 unsigned char 中并像这样打印
unsigned char id = buffer[4] + buffer[5]
printf("Identification: 0x%X (%d)\n", id, id);
但是我得到了错误的值。而且我不确定我做错了什么。 任何帮助将不胜感激。
我也读错了 header 的其他几个部分,希望弄清楚这一点会帮助我弄清楚其余部分。
ID 的长度为两个字节,因此您必须使用足够大的整数类型来容纳两个字节。将它们相加并不能达到相同的结果。
unsigned short id = (buffer[4] << 8) | buffer[5];
printf("Identification: 0x%hx (%hu)\n", id, id);