如何使用 protoc 将协议缓冲区字符串编码为二进制

2024-01-09

我一直在尝试使用 protoc cli 实用程序对字符串进行编码。 注意到输出仍然包含纯文本。 我究竟做错了什么?

osboxes@osboxes:~/proto/bin$ cat ./teststring.proto
syntax = "proto2";
message Test2 {
  optional string b = 2;
}

echo b:\"my_testing_string\"|./protoc --encode Test2 teststring.proto>result.out

result.out 包含:

^R^Qmy_testing_string

协议版本 libprotoc 3.6.0 和 libprotoc 2.5.0


只是为了正式回答:

写的命令应该没问题;输出isprotobuf 二进制 - 它只是类似于文本,因为 protobuf 使用 utf-8 来编码字符串,并且您的内容由字符串主导。然而,尽管如此:该文件不是actually文本,如果需要检查它,通常应该使用十六进制查看器或类似工具。

如果你想了解文件的内部结构,https://protogen.marcgravell.com/decode https://protogen.marcgravell.com/decode是一个很好的资源 - 它按照协议规则提取输入文件或十六进制字符串,并告诉您每个字节的含义(字段标头、长度前缀、有效负载等)。

我猜你的文件实际上是:

(十六进制)10 11 6D 79 5F 等

即 0x10 =“字段 2,长度前缀”,0x11 = 17(有效负载长度,编码为 varint),然后“my_testing_string”编码为 17 个字节的 UTF8。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 protoc 将协议缓冲区字符串编码为二进制 的相关文章

随机推荐