在协议缓冲区 c++ 中反序列化字符串数组

Deserialize string arrays in protocol buffer c++

本文关键字:反序列化 字符串 数组 c++ 协议 缓冲区      更新时间:2023-10-16

我正在将一个包含 2 个字符串数组的对象从 C# 程序发送到带有 rabbitmq 的C++程序。C# 程序中的类如下所示:

namespace LPRRabbitMq.Class
{
[ProtoContract(SkipConstructor = true)]
public class BlackAndWhiteList
{
[ProtoMember(1)]
public string[] BlackList { get; set; }
[ProtoMember(2)]
public string[] WhiteList { get; set; }
}
}

用于在C# 中序列化对象的代码:

byte[] data;
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, blackAndWhite);
data = ms.ToArray();
}

现在我想在C++程序中获取数据。我创建了一个原型文件:

syntax = "proto2";
package Protobuf;
message BlackAndWhiteList {
optional bytes BlackList = 1;
optional bytes WhiteList = 2;
}

我在C++程序上收到消息,但是如何反序列化数据以及如何最终将每个字符串数组保存在单独的数组中?

你最好的办法是让图书馆帮助你:

var proto = Serializer.GetProto<BlackAndWhiteList>(ProtoSyntax.Proto2);

这为您提供:

syntax = "proto2";
package LPRRabbitMq.Class;
message BlackAndWhiteList {
repeated string BlackList = 1;
repeated string WhiteList = 2;
}

这告诉你如何最好地表示它。通过在此处使用repeated,您应该能够正确识别C++代码中的各个元素。通过使用string,它应该作为适合C++的类型出现。