gpt4 book ai didi

c - 可变长度结构C

转载 作者:行者123 更新时间:2023-11-30 21:10:16 25 4
gpt4 key购买 nike

我在将数据字节放入我的结构中时遇到问题。我正在用 C 编程。我收到的字节如下所示:

Byte1 | Byte 2 | Byte 3| lengthData (2 Bytes) | data (variable)

我的结构如下:

struct Packet {
unsigned char byte1[1];
unsigned char byte2[1];
unsigned char byte3[1];
unsigned char length[2];
unsigned char * data;
}*Packet

通过读取命令,我可以重播数据。

char * replay;
replay = (char*) malloc (MAX_DATA_LENGTH);
memset(replay, 0x00, MAX_DATA_LENGTH);
read(fd, replay, MAX_DATA_LENGTH)

现在我想将数据字节放入结构中。首先,我必须为指针数据分配内存。我的问题是,如何在结构中不费很大力气就能获取数据?

最佳答案

首先修复结构体定义:

typedef struct Packet {
unsigned char byte1, byte2, byte3;
unsigned short length;
unsigned char data[];
} Packet; // note: no bogus star

这是一种可移植阅读方式:

unsigned char header[5];
if ( 5 != read(fd, header, 5) )
// error handling...

unsigned short length = header[3] * 0x100 + header[4]; // assuming network byte order
Packet *packet = malloc( sizeof *packet + length );
if ( !packet )
// error handling....

packet->byte1 = header[0];
packet->byte2 = header[1];
packet->byte3 = header[2];
packet->length = length;
ssize_t num_read = read(fd, packet->data, length);

if ( num_read != length )
// error handling...

关于c - 可变长度结构C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30481343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com