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

What does this icmphdr *pkt = (icmphdr *)packet; mean?

本文关键字:icmphdr 是什么 意思 pkt 这个      更新时间:2023-10-16

所以我在这里阅读这篇文章我遇到了这段代码

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

据我所知,他们正在声明一个字符数组,这是icmpdr的大小,然后它对我来说变得模糊。下面这行我甚至不知道从哪里开始解释

查看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;

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