簡體   English   中英

使用 C 在 nanopb 中對字節類型內的字符串進行編碼/解碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM