为什么当我用 max_count 对 nanopb 中的重复字段进行编码时,bytes.written 在另一只手中为零(空),它无法被编码

Why when i encode the repeated field in nanopb with max_count, the bytes.written is zero(empty) in the other hands it cant be encoded

我正在使用 arduino 对按摩进行编码,我已经尝试了编码和解码的要求和成功,但是对于重复,在我编码之后,缓冲区的大小为 0,所以我无法发送我的缓冲区到其他arduino

这是我的代码

file.ino

  {

   for(int i=0;i<7;i++)
    message.header[i]=i+1;

//this is my variabel, i declare in .proto = repeated int32 header = 4  [(nanopb).max_count = 10, (nanopb).fixed_length = true];

  stream = pb_ostream_from_buffer(buffer, sizeof(buffer));

  bool status = pb_encode(&stream, Message_fields, &message);

 Serial.println(stream.bytes_written); 

//when i print this after encode, the data is loss, but when the field type is required, it will show some data bytes

}

您的 header 变量是 fixed-length 包含 10 个条目的数组。那应该没问题。如果它不是 fixed-length 一个,将会有一个单独的 header_count 字段,您必须将其设置为实际的条目数。你可以查看生成的.pb.h到double-check里面没有header_count字段。

您的代码没有显示您分配的缓冲区的长度。是不是太短了?尽管该消息应该只占用大约 14 个字节。

您还可以检查status是否为真,即编码是否成功。如果不是,您可以从 stream.errmsg.

中找到更多信息