所以我正在阅读帖子here 我遇到过这段代码
char packet[sizeof(icmphdr)];
memset(packet, 0, sizeof(packet));
icmphdr *pkt = (icmphdr *)packet;
根据我的理解,声明了一个大小为icmphdr的char数组,然后在此之后它变得模糊。接下来的这行我甚至不知道从哪里开始解释这个。
答案 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;
当然,如果你这样做,你必须非常小心结构包装。