[英]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 結尾的 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;
}
此時,如果我嘗試讀取 integer 的值,則沒有問題(例如flow_msg->dst_addr
),但如果我想讀取字符串值,我會得到一個 null 指針,因為flow_msg->src_ap_name
為空.
我不知道應該如何正確編碼/解碼字符串值......真的不知道我在這里錯過了什么......任何線索?
首先,我現在意識到我的問題是多么愚蠢。 實際上,我不會刪除它,因為@jpa 花了一些時間試圖回答我的疑問。
主要問題是我試圖發送指針(即 memory 地址),然后接收方當然不知道如何處理這個隨機的 memory 地址。 另外,問題是我“不走運”,這可能是因為我在接收端使用了相同的機器和相同的編譯器,一些指針實際上被正確取消引用,這讓我很困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.