我正在尝试为具有动态负载长度并由 header 结构 (LEN) 中的变量确定的数据包创建结构。
我不确定如何正确地执行此操作,而且我对遇到的一些示例感到困惑。波纹管是我将要使用的基础结构。 谢谢。
struct packet
{
unsigned char payload;
unsigned int CRC : 16;
struct header
{
unsigned char SRC;
unsigned char DST;
unsigned char NS : 3; //3 bits long
unsigned char NR : 3;
unsigned char RSV : 1; //1 bit long
unsigned char LST : 1;
unsigned char OP;
unsigned char LEN;
} HEADER;
};
struct packet PACKET;
最佳答案
您可以使用有时称为“弹性数组”的结构。 (或者正如@Jerry Coffin 指出的那样,一个“灵活的数组成员”)可变长度的有效负载需要放在最后:
struct packet
{
struct header
{
unsigned char SRC;
unsigned char DST;
unsigned char NS : 3; //3 bits long
unsigned char NR : 3;
unsigned char RSV : 1; //1 bit long
unsigned char LST : 1;
unsigned char OP;
unsigned char LEN;
} HEADER;
unsigned int CRC : 16;
unsigned char payload[1]; //STRETCHY.
};
struct packet PACKET;
这种类型的结构需要动态分配,因为您需要手动为有效载荷腾出足够的空间。
PACKET * p = malloc( sizeof(PACKET)+payloadLength*sizeof(char) );
p->HEADER->LEN = payloadLength;
//fill in rest of header here.
memcpy(p->payload, incomingData, payloadLength);
关于c - 结构 C 内的动态可变长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899936/