使用 'protoc --decode' 解码二进制数据失败并出现错误 "Type not defined"

Decoding binary data using 'protoc --decode' fails with error "Type not defined"

我在我的项目中使用 google 的协议缓冲区进行通信,并且我正在尝试使用他们的命令行工具 protoc 手动解码一些二进制数据(十六进制格式)。这是我正在使用的命令:

echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=WiFiConfigPayload wifi_config.proto

我从此命令以及我为“--decode”指定的任何其他类型收到以下错误:

Type not defined: WiFiConfigPayload

这是我正在使用的主要 .proto 文件(它是由 espressif 创建的,用于他们的 esp32 芯片)。此文件还导入了其他 .proto 文件,如果有人认为相关,可以找到 here

syntax = "proto3";
package espressif;

import "constants.proto";
import "wifi_constants.proto";

message CmdGetStatus {

}

message RespGetStatus {
    Status status = 1;
    WifiStationState sta_state = 2;
    oneof state {
        WifiConnectFailedReason fail_reason = 10;
        WifiConnectedState connected = 11;
    }
}

message CmdSetConfig {
    bytes ssid = 1;
    bytes passphrase = 2;
    bytes bssid = 3;
    int32 channel = 4;
}

message RespSetConfig {
    Status status = 1;
}

message CmdApplyConfig {

}

message RespApplyConfig {
    Status status = 1;
}

enum WiFiConfigMsgType {
    TypeCmdGetStatus = 0;
    TypeRespGetStatus = 1;
    TypeCmdSetConfig = 2;
    TypeRespSetConfig = 3;
    TypeCmdApplyConfig = 4;
    TypeRespApplyConfig = 5;
}

message WiFiConfigPayload {
    WiFiConfigMsgType msg = 1;
    oneof payload {
        CmdGetStatus cmd_get_status = 10;
        RespGetStatus resp_get_status = 11;
        CmdSetConfig cmd_set_config = 12;
        RespSetConfig resp_set_config = 13;
        CmdApplyConfig cmd_apply_config = 14;
        RespApplyConfig resp_apply_config = 15;
    }
}

关于为什么命令无法从 .protoc 文件解析 WifiConfigPayload 类型(或与此相关的任何类型)的任何想法?

我自己解决了这个问题,当然是在发布后不久。

问题是第 "package espressif;" 行,它包含在他们所有的 .proto 文件中。 XCode 似乎需要它来构建项目,但 protoc 工具并不期望该行。

当我从此文件及其所有导入的 .proto 文件中删除这一行时,解析成功。

我也 运行 关注这个问题,我认为你错过了真正的错误。 protoc 可能在抱怨,因为您没有通过包引用消息。

protoc --decode=<PackageName>.MessageName

你的 PackageName 是 espressif

echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=espressif.WiFiConfigPayload wifi_config.proto