Как кодировать строку буфера протокола в двоичный файл, используя протокол - PullRequest
0 голосов
/ 28 июня 2018

Я пытался кодировать строки с помощью утилиты 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

1 Ответ

0 голосов
/ 29 июня 2018

Просто формализовать в ответе:

Команда, как написано, должна быть в порядке; вывод - это двоичный файл protobuf - он просто напоминает текст, потому что protobuf использует utf-8 для кодирования строк, а в вашем контенте преобладает строка. Однако, несмотря на это: файл не является на самом деле текстом, и вы обычно должны использовать шестнадцатеричный просмотрщик или аналогичный, если вам нужно проверить его.

Если вы хотите понять внутренности файла, https://protogen.marcgravell.com/decode - хороший ресурс - он копирует входной файл или шестнадцатеричную строку в соответствии с правилами протокола и сообщает вам, что означает каждый байт (заголовки полей, длина префиксы, полезные данные и т. д.).

Я предполагаю, что ваш файл на самом деле:

(hex) 10 11 6D 79 5F и т. Д.

т.е. 0x10 = «поле 2, длина префикса», 0x11 = 17 (длина полезной нагрузки, закодированная как varint), затем «my_testing_string», закодированная как 17 байтов UTF8.

...