Protocol buffers Nanopb-解码失败:零标记

Protocol buffers Nanopb-解码失败:零标记,protocol-buffers,decode,encode,nanopb,Protocol Buffers,Decode,Encode,Nanopb,这是我第一次在这里写信,如果我做错了什么,请原谅 我需要“解码失败:零标记”状态的帮助 我想使用ESP-NOW发送阵列 这是我的编码方面: epostavke.baterija[0]=razina_baterije[0]; postavke.baterija[1]=razina_baterije[1]; postavke.baterija[2]=razina_baterije[2]; postavke.baterija[03]=razina_baterije[3];

这是我第一次在这里写信,如果我做错了什么,请原谅

我需要“解码失败:零标记”状态的帮助

我想使用ESP-NOW发送阵列 这是我的编码方面:

epostavke.baterija[0]=razina_baterije[0];
    postavke.baterija[1]=razina_baterije[1];
     postavke.baterija[2]=razina_baterije[2];
      postavke.baterija[03]=razina_baterije[3]; 
      postavke.baterija[4]=razina_baterije[4];
       postavke.baterija[5]=razina_baterije[5];
    pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
    pb_encode(&stream, Postavke_fields, &postavke);
    esp_now_send(NULL, (uint8_t *) &buffer, sizeof(buffer));
在我打印时进行编码后:

 Serial.println(postavke.baterija[0]);
   Serial.println(postavke.baterija[1]);
它向我展示了正确的值——这意味着postavke.baterija[0]的值与postavke.baterija[1]的值类似,例如,它向我展示了87,85这取决于它

但问题是我什么时候想解码。它告诉我:“解码失败:零标记” 以下是代码:

 enter cod stream = pb_istream_from_buffer(buffer,sizeof(buffer));
     bool status = pb_decode(&stream, Postavke_fields, &postavke);
        if (!status)
        {
            printf("Decoding failed: %s\n", PB_GET_ERROR(&stream));
            return ;
        }
     Serial.println("Stigli podaci, a oni glase: ");
     Serial.println(postavke.znak);
   Serial.println(postavke.vrijeme_trajanja);
   Serial.println(postavke.vrijeme_odmora);
   Serial.println(postavke.boja1);
   Serial.println(postavke.boja2);
   Serial.println(postavke.boja3);
   Serial.println(postavke.broj_signala);
   Serial.println(postavke.timer);
   Serial.println(postavke.multicaster);
   Serial.println(postavke.broj_propustenih);
   Serial.println(postavke.random_odmor);
  Serial.println(postavke.baterija[0]);
  Serial.println(postavke.baterija[1]);
如果我不用这个

`

它解码其他所有内容,但不解码“postavke.baterija”数组

下面是我如何在.proto文件中完成的

 message Postavke {
required int32 ID=1;
required int32 znak=2;
required int32 vrijeme_trajanja=3;
required int32 vrijeme_odmora=4;
required int32 boja1=5;
required int32 boja2=6;
required int32 boja3=7;
required int32 broj_signala=8;
required int32 timer=9;
required int32 multicaster=10;
required int32 broj_propustenih=11;
required int32 random_odmor=12;
required int32 svjetlina=13;
 repeated int32  baterija=14 ;
}

这是我的.options文件

Postavke.baterija  max_count:6;
Postavke.baterija  max_size:6;
请帮帮我!! 错误在哪里?为什么不想解码

谢谢大家!

pb_istream_from_buffer(buffer,sizeof(buffer));
您需要传递消息的实际长度,而不是整个缓冲区的长度

现在,nanopb正在读取超过消息长度的数据,显然达到了零标记号,这在协议缓冲区中是无效的

pb_istream_from_buffer(buffer,sizeof(buffer));