我是C编程的新手,我查看了以下代码:
struct iphdr *iph = (struct iphdr *)Buffer;
表达是什么意思?
的链接答案 0 :(得分:2)
它将buffer
强制转换为指向struct iphdr
的指针,然后将iph
初始化为该指针。这是因为buffer
是指向原始字节缓冲区的指针,但在此函数中,已知缓冲区中存储的字节遵循struct iphdr
的格式。因此struct iphdr
可以用来访问缓冲区的内容,而不必解释和操作原始字节。
编辑:澄清(根据评论):演员不会复制或转换任何内容。它基本上只是告诉编译器“我知道buffer
应该包含unsigned char
但是在这个特定时间这些字节实际上是struct iphdr
所以让我通过指针访问它们{ {1}}以更方便的方式“。
答案 1 :(得分:0)
buffer
是指向用于存储原始数据包数据的unsigned char
数组的指针。
这会重新将buffer
的类型重新理解为指向struct iphdr
的指针,因此您可以将其指定给iph
并将其作为结构读取。从技术上讲,这只会压制编译器错误,因为它们是buffer
,因为它们是不同类型的,所以iph
的值不同,尽管它们都是指针。
或者,您可以改为buffer
类型void*
。
指向void
的指针可以分配给任何其他指针类型,而无需重新设置它的类型:
void* buffer = malloc(65536);
...
void ProcessPacket(void* buffer, int size) {
struct iphdr *iph = buffer;
...
}