私はこのようにバイナリモードでファイルを読んでいます:
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 でした。
私は2つのことを試しました:
printf("size of ip header: %hu\n", ip_header.ip_len);
13312を出力しました(ビットの値が0x3400であるかのように)- 構造体を 2 つの 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);
今回は出力を受け取りました: size of ip header: 0 (0x00) size of ip header: 52 (0x34) これが正しい答えです。
私の質問は: 最初の印刷で何がうまくいかなかったのですか?
ありがとう