Десериализация буфера протокола Buffer - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь десериализовать буфер из сокета. Он определяется как структура C.

Один из членов структуры - uint8 [5].
Я застрял, как выразить это с помощью файла .proto.

Исходная структура C отправителя находится ниже.

typedef struct {
    uint32_t body_length;
    uint8_t body_version; 
    uint8_t reserved[5];
}

Моя версия struct.proto находится ниже.

syntax = "proto3";
message message_t {
        uint32 body_version = 1;
        uint8 body_version = 2;  //uint8_t body_version;
        bytes reserved = 3;  //uint8 reservered[5];
}

Я не знаю, как выразить uint8 и 5-байтовый массив. В спецификации proto3 нет байтов uint8 и фиксированного размера.

1 Ответ

0 голосов
/ 14 ноября 2018

protobuf действительно не имеет массивов фиксированного размера, а целые числа фиксированного размера не включают 5 байтов. Так; ваш лучший вариант, вероятно, bytes, и просто сделайте так, чтобы всегда содержал ровно 5 байтов.

Примечание: protobuf не предназначен для анализа произвольных протоколов / полезных нагрузок, таких как фреймы сокетов или необработанные дампы в стиле C. только предназначен для использования с самим protobuf. * ​​1008 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...