次のようなファイルがあり.proto
ます。
message ObjValue
{
// ...
optional bytes byteval = 6 [max_size = 256]; // arbitrary structure or message
// ...
このプロト エンコーディングを使用して、変化する構造体を送信します。この構造体には、基本的に int と文字列 (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
空であるため null ポインターが取得されます。
文字列値を適切にエンコード/デコードする方法がわかりません...ここで何が欠けているのか本当にわかりません...手がかりはありますか?