从原始字节解码协议缓冲区(以 C++为单位)

Decode a protocol buffer from raw bytes in C++

本文关键字:C++ 为单位 缓冲区 原始 字节 解码 协议      更新时间:2023-10-16

我需要在我的 c++ 函数中使用原始字节形式的协议缓冲区输入。https://developers.google.com/protocol-buffers/docs/cpptutorial 中的教程仅提到将数据序列化和分析到文件/从文件解析。这不是我的用例。

如何从原始字节解码协议缓冲区?我只有一个指向数据和要使用的大小的指针。最好我不希望复制数据。

如果我这样做,现在似乎可以工作:

uint8* buffer = (uint8*) theBytesPnt;
CodedInputStream* codedStream = new CodedInputStream(buffer, nBytes );
EquityPredParams* message = new myGeneratedProtoClass();
bool_success = message->ParseFromCodedStream(codedStream);
magicallyObtainedNum = message->people(1).id();

其中 People 类在 .proto 文件中定义,如 Google 教程中所示。

Google protobufs有一个你可以使用的类型bytes。如果你在这种情况下需要将其转换为另一种标量类型,则必须在将其发送给 protobuffs 之前执行此操作,因为库会在幕后做一些事情以确保它在目的地的顺序正确。