我对protoc的使用感到困惑,无法在互联网上找到有关其用法的例子: -
protoc -IPATH=path_to_proto_file_directory path_to_proto_file --decode=MESSAGE_TYPE < ./request.protobuf
那么这里的message_type是什么,有人可以写一个完整正确的例子
答案 0 :(得分:0)
syntax = "proto3";
package response;
// protoc --gofast_out=. response.proto
message Response {
int64 UID
....
}
use protoc:
protoc --decode=response.Response response.proto < response.bin
protoc --decode=[package].[Message type] proto.file < protobuf.response
or use:
protoc --decode_raw < protobuf.response
without proto file.
答案 1 :(得分:0)
几年后,这是另一个答案。
# Check the version
protoc --version
>libprotoc 3.0.0
您可以在没有架构(.proto 文件)的情况下使用 --decode_raw
选项。
考虑这个包含字节 0x08 0x01
的简单示例消息。
我假设一个带有 echo 的 Linux 环境
# Use echo to print raw bytes and don't print an extra `\n` newline char at the end
echo -en '\x08\x01' | protoc --decode_raw
# Output below. This means field 1 integer type with a value of 1
1: 1
如果您有 proto 文件,那么您可以获得比 --decode_raw
更好的结果。如果您想使用新值对其进行编码,您甚至可以将 --decode
的输出发送回 protoc。
syntax = "proto3";
message Test {
int32 FieldOneNumber
}
# Decode the same message as the raw example against this schema
echo -en '\x08\x1' | protoc --decode="Test" --proto_path= ./Example.proto
# Output. Note that the generic field named 1 has been replaced by the proto file name of FieldOne.
FieldOne: 1