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