c++ - 我可以在 protobuf 中描述恒定大小的消息吗?

标签 c++ protocol-buffers

例如,我有下一条消息:

Message Header {
    fixed32 messageType;
    fixed32 messageSize;
}

我可以确定在任何平台、任何语言上, header 都会以恒定大小的字节数组进行序列化?

最佳答案

是的...是的,应该是可预测的并且大小固定。有效负载是固定大小的, header 是 varint 编码的。这里有一个轻微问题,即 varint 规范实际上并不禁止次优编码 - 它理论上可以包含最多 9 个额外字节的零填充,仅包含连续位放。但实际上这不是问题。

所以:这些是解释为 varint 的相同数据(值:1):

预期:

00000001

次优:

10000001 10000000 10000000 10000000 00000000

非常次优:

10000001 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 00000000

(每个字节的 MSB 是连续标志;其他 7 位是有效负载,最低有效组在前;这里 varint 的最大大小应为 10 个字节,因为只有 64 位是预期的,但我想知道是否有任何库没有明确检查这一点!)

实际上:图书馆使用第一种形式。

关于c++ - 我可以在 protobuf 中描述恒定大小的消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211408/

相关文章:

C++、UDP、sendto需要延迟才能工作

c++ - "Searching Taps"对 HomeBrew 意味着什么?

c++ - Protocol Buffer 问题,多个序列化为二进制文件

c++ - 安全地删除指向指针数组的指针

c++ - 每当调用函数时将值存储在数组中

c++ - Protocol Buffer 中缺少带有协议(protocol)的输入文件

c# - 如何使用 protobuf 将 ServiceStack 服务与非 ServiceStack 客户端集成?

documentation - 生成 Protobuf 文档?

python - 将 python dict 转换为 protobuf

c++ - Windows 7 中的命名管道