这个icmphdr * pkt =(icmphdr *)数据包是什么?意思?

时间:2014-07-08 07:49:16

标签: c++ icmp

所以我正在阅读帖子here 我遇到过这段代码

char packet[sizeof(icmphdr)];
memset(packet, 0, sizeof(packet));

icmphdr *pkt = (icmphdr *)packet;

根据我的理解,声明了一个大小为icmphdr的char数组,然后在此之后它变得模糊。接下来的这行我甚至不知道从哪里开始解释这个。

1 个答案:

答案 0 :(得分:1)

查看icmphdr的类型定义。实际上,你说服编译器你的char(byte)数组实际上是一个icmphdr(我猜)结构。这意味着您可以将原始字节读入数组,然后访问该数组的不同部分,就像它们是结构一样。

所以我要说icmphdr定义为:

typedef struct
{
    int sequence_number;
    int data_size;
    bool fragment;
} icmphdr;

这意味着你可以这样做:

read(socket_fd, packet, sizeof(icmphdr));

然后你可以做以下事情:

int sequence= packet->sequence_number;

当然,如果你这样做,你必须非常小心结构包装。