ios - 使用“protoc --decode”解码二进制数据失败,出现错误“类型未定义”
问题描述
我在我的项目中使用谷歌的协议缓冲区进行通信,我正在尝试使用他们的命令行工具 protoc 手动解码一些二进制数据(十六进制格式)。这是我正在使用的命令:
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=WiFiConfigPayload wifi_config.proto
我从此命令以及我为“--decode”指定的任何其他类型收到以下错误:
类型未定义:WiFiConfigPayload
这是我正在使用的主要 .proto 文件(它是由 espressif 创建的,用于他们的 esp32 芯片)。此文件还导入了其他 .proto 文件,如果有人认为它相关,可以在此处找到。
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 类型(或任何类型)的任何想法?
解决方案
我也遇到了这个问题,我认为你错过了实际的错误。protoc 可能会抱怨,因为您没有通过包引用该消息。
protoc --decode=<PackageName>.MessageName
在您的情况下,PackageName 是 espressif
echo 08015a325a300a0d313932 | xxd -r -p | protoc --decode=espressif.WiFiConfigPayload wifi_config.proto
推荐阅读
- javascript - 用不同的文本在不同的 html 页面中多次渲染一个组件
- java - 如何将带有图像的 Google Doc 文件上传到云端硬盘?
- python - 如何解决“未找到 Python 共享库,未加载 Python 绑定”。在 R 中导入 Python3 包时?
- python - 如何在for循环中只打印一次语句
- python - 在 python 中使用 executemany 将浮点数加载到 SQL Server
- javascript - 如何为Angularjs选择动态设置值?
- python - 我在 python 中读取简单文本文件时遇到问题
- makefile - sed 的表达式在 Makefile 中做了什么
- node.js - 如何从 .then 块返回响应?
- regex - 至少一个大写、一个小写、一个数字和一个特殊字符的正则表达式