反序列化缓冲区协议缓冲区

Posted

技术标签:

【中文标题】反序列化缓冲区协议缓冲区【英文标题】:Deserializing buffer Protocol Buffer 【发布时间】:2018-11-14 00:15:31 【问题描述】:

我正在尝试从套接字反序列化缓冲区。 它被定义为 C 结构。

struct 的一个成员是 uint8[5]。 我坚持如何用 .proto 文件表达这一点。

sender的原始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】:

protobuf 确实没有固定大小的数组,固定大小的整数也不包括 5 个字节。所以;您最好的选择可能是 bytes,只需使其始终包含正好 5 个字节。

注意:protobuf 并非用于解析任意协议/有效负载(例如套接字帧或原始 C 样式转储)的机制。它用于 protobuf 本身。

【讨论】:

以上是关于反序列化缓冲区协议缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

协议缓冲区 - 用例

使用 pybind11 从 C++ 反序列化 Python 中的 protobuf 缓冲区

确定协议缓冲区消息类型的最佳实践

进出 XPathDocument 的协议缓冲区消息

Protobuf-net 对字节数组进行序列化/反序列化

字符缓冲流,properties类,序列化流与反序列化流,打印流