c - 将数组类型转换为 C 中的结构

标签 c structure

我有这样的结构

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/

相关文章:

c# - 按值传递结构

django - 有没有Django项目结构/信息流可视化的工具?

c - 频率分析?凯撒密码C

swift - "How to fix ' 链接器命令失败,退出代码为 1(使用 -v 查看调用)'?"

c - 尝试从 printf 语句中的函数打印静态变量时出现奇怪的输出

C-迭代通过 void* 传递的结构数组

c - 如何将SHA256摘要存储在C中的变量中

c++ - 如何从 C++ 中 vector 的最后一个元素中获取字段?

c - C语言中的多态应用问题

c - SSL_CTX_use_certificate_file 因 EXC_BAD_ACCESS 而失败