You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现TCP/IP栈时,将void*缓冲区指针转不同结构体指针是否合规?

C++中以太网帧解析的指针转换合规性问题

我正在学习并尝试用C++实现TCP/IP栈,在解析以太网帧提取头部信息时,采用std::memcpy()处理,代码如下:

std::memcpy(&Des,
           static_cast<uint8_t*>(Rx_Frame.payload)+ETH::preample_SFD_Size,
           ETH::Phy_Addr_Size);

但查看lwip源码时发现,它直接将以太网帧指针转换为struct eth_hdr类型指针并解引用,代码如下:

/* points to packet payload, which starts with an Ethernet header */
ethhdr = (struct eth_hdr *)p->payload;

我曾了解此类操作属于未定义行为,想请教以下问题:

  • 由于原指针是不可解引用的void*,这种情况是否合规?
  • 是否不构成类型双关?
  • 若构成类型双关,是否不允许将其转换为结构体指针?

内容的提问来源于stack exchange,提问作者maboeln1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:23:13