我正在以这种方式以二进制模式读取文件:
fread(&pcap_header ,sizeof(pcap_hdr_t ), 1 , pFile);
fread(&pcaprec_header ,sizeof(pcaprec_hdr_t ), 1 , pFile);
fread(ðer_header ,sizeof(ethernet_hdr_t ), 1 , pFile);
fread(&ip_header ,sizeof(ip_hdr_t ), 1 , pFile);
fread(&tcp_header ,sizeof(tcp_header_t ), 1 , pFile);
fread(&modbus_header ,sizeof(modbus_header_t ), 1 , pFile);
而上面的所有变量都被定义为它旁边的“sizeof()”函数中的类型。我正在尝试提取文件的特定部分并打印它。这部分的大小为 16 位,定义如下:
uint16_t ip_len;
在类型“ip_hdr_t”内。我查看了 WireShark,看到这 16 位的实际值是 0x0034。
我尝试了两件事:
printf("size of ip header: %hu\n", ip_header.ip_len);
打印 13312 (好像位的值是 0x3400)- 将结构划分为两个 8 位变量:
uint8_t ip_len; uint8_t ip_len2;
并分别打印:printf("size of ip header: %hu\n", ip_header.ip_len); printf("size of ip header: %hu\n", ip_header.ip_len2);
这次我收到了输出:ip header 的大小:0 (0x00) ip header 的大小:52 (0x34),这是正确的答案。
我的问题是:第一次打印出了什么问题?
谢谢