我有这样的结构
struct packet
{
int seqnum;
char type[1];
float time1;
float pri;
float time2;
unsigned char data[512];
}
我正在接收数组中的数据包
char buf[529];
我想单独获取 seqnum、数据。下面的类型转换是否有效。它为我提供了垃圾值(value)。
struct packet *pkt;
pkt=(struct packet *)buf;
printf(" %d",pkt->seqnum)
最佳答案
不,这可能行不通,而且通常是一种糟糕且失败的方法。
您必须使用特定于编译器的扩展来确保您的结构成员之间没有不可见的填充,这样才能发挥作用。例如,对于 gcc,您可以使用 __attribute__()
语法。
因此,这不是一个可移植的想法。
最好明确说明并解压缩每个字段。这也让您有机会在您的网络协议(protocol)中定义明确的字节序,这对于互操作性来说通常是个好主意。
关于c - 将数组类型转换为 C 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16017207/