我有这个结构:
typedef struct
{
auth_header header; // another struct
uint8_t action;
uint8_t priv_lvl;
uint8_t authen_type;
uint8_t service;
uint8_t user_len;
uint8_t port_len;
uint8_t rem_addr_len;
uint8_t data_len;
char *user;
char *port;
char *rem_addr;
char *data;
} auth_start;
我想创建一个缓冲区并在其中插入数据,这样我就可以将这些数据发送到我的服务器。
答案 0 :(得分:1)
我不确定缓冲区需要什么类型
任何字节类型都可以。考虑到uint8_t
中的非指针字段类型均为struct
,uint8_t
是一个不错的选择。
我不知道该怎么做,我应该用
memcpy()
逐个复制每个字段
首先,您需要确定缓冲区需要多少内存。您分配该内存,并使用赋值复制非指针部分。最后,您从{4}指向memcpy
数据:
auth_start s = ...
// Add 8 for the initial 8 members
uint8_t *buf = malloc(8+s.user_len+s.port_len+s.rem_addr_len+s.data_len);
uint8_t p = buf;
// Copy the initial fields
*p++ = s.action;
*p++ = s.priv_lvl;
... // And so on for the remaining members
// Copy pointer-based members
memcpy(p, s.user, s.user_len);
p += s.user_len;
memcpy(p, s.port, s.port_len);
p += s.port_len;
... // And so on for the remaining pointer members