我在使用 nanopb 的嵌入式设备和使用 protobuf-c 的台式电脑之间进行通信,但在解析编码消息时出错。嵌入式设备发送消息“响应”,其中包含不同消息类型 (ResponseContent) 的可选字段。另一条消息具有必填字段。这是消息定义
syntax = "proto2";
package Message;
message Response
{
enum RESPONSE_TYPES
{
OK = 0;
ERROR = 1;
BUSY = 2;
STATUS = 3;
}
required RESPONSE_TYPES type = 1;
optional ResponseContent response_content = 2;
}
message ResponseContent
{
enum CONTENT_TYPES
{
DIN = 0;
DOUT = 1;
AIN = 2;
AOUT = 3;
}
required CONTENT_TYPES type = 1;
oneof result
{
Din din = 21;
Dout dout = 22;
Ain ain = 23;
Aout aout = 24;
}
}
message Din
{
required bool state = 1;
}
message Dout
{
required bool ack = 1;
}
message Ain
{
required float val = 1;
}
message Aout
{
required bytes payload = 1;
}
为什么 Response 消息中的 ResponseContent 类型是可选的,并且 has_response_content 参数设置为false时会弹出错误“缺少必填字段” ?注意:显然这发生在 *bool ParseFromArray(const void * data, int size)* 而不是 *bool ParsePartialFromArray(const void * data, int size)*