Encode/decode nanopb 中字节类型内的字符串与 C

Encode/decode strings inside byte type in nanopb with C

我有一个 .proto 文件,如下所示:

message ObjValue
{
// ...
    optional bytes byteval    = 6 [max_size = 256]; // arbitrary structure or message
// ...

我使用这个原型编码来发送变化的结构。这个结构基本上包含整数和字符串(一个以 null 结尾的字符数组)。

发件人发送结构做这样的事情:

   // 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 '[=12=]'
    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 为空。

我不知道应该如何正确 encode/decode 字符串值...真的不知道我在这里遗漏了什么...有什么线索吗?

首先,我现在意识到我的问题是多么愚蠢。实际上,我并没有删除它,因为@jpa 花了一些时间来回答我的疑惑。

主要问题是我试图发送指针(即内存地址),然后接收方当然不知道如何处理这个随机内存地址。此外,问题是我“不走运”,可能是因为我在接收方使用同一台机器和相同的编译器,一些指针实际上被正确地取消引用,这让我很困惑。