0

我在使用 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)*

4

0 回答 0