为什么当我用 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
.
中找到更多信息
我正在使用 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
.