我有一个.proto
看起来像这样的文件:
message ObjValue
{
// ...
optional bytes byteval = 6 [max_size = 256]; // arbitrary structure or message
// ...
我使用这个原型编码来发送改变的结构。这个结构基本上包含整数和字符串(一个以 null 结尾的 char 数组)。
发件人发送结构做这样的事情:
// Here I create the struct and fill it with integers and strings
struct flow_msg *flow_msg = malloc(sizeof(struct flow_msg));
flow_msg->dst_addr = 1;
flow_msg->src_addr = 2;
flow_msg->src_ap_name = strdup(src_ap_name);
// Here I save the length of the struct and a void pointer that points to the struct
struct ser_obj_value *obj_value = malloc(sizeof(struct ser_obj_value));
obj_value->size = sizeof(struct flow_msg) + strlen(src_ap_name) + 1; // +1 because of '\0'
obj_value->data = flow_msg;
然后,接收者获取消息,使用 nanopb 对其进行解码,然后:
int
handle_msg(void *f_msg)
{
struct flow_msg *flow_msg = (struct flow_msg *)f_msg;
}
那时,如果我尝试读取整数的值,则没有问题(flow_msg->dst_addr
例如),但如果我想读取字符串值,我会得到一个空指针,因为它flow_msg->src_ap_name
是空的。
我不知道应该如何正确编码/解码字符串值......真的不知道我在这里错过了什么......任何线索?