所以我正在阅读帖子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;
当然,如果执行此操作,则必须对结构打包非常小心。