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

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

icmphdr *pkt = (icmphdr *)packet;


据我了解,声明了一个字符数组,其大小为icmphdr,然后在我之后变得模糊。接下来的那行我什至不知道从哪里开始解释。

最佳答案

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

因此,可以说icmphdr被定义为:

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


那意味着您然后做:

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


然后您可以执行以下操作:

int sequence= packet->sequence_number;


当然,如果执行此操作,则必须对结构打包非常小心。

08-18 15:20