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

Posted

技术标签:

【中文标题】反序列化协议缓冲区c ++中的字符串数组【英文标题】:Deserialize string arrays in protocol buffer c++ 【发布时间】:2018-06-11 09:36:10 【问题描述】:

我将一个包含 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++ 程序上收到消息,但是如何反序列化数据以及如何最终将每个字符串数组保存在单独的数组中?

【问题讨论】:

【参考方案1】:

您最好的办法是请图书馆帮助您:

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++ 的类型。

【讨论】:

完美运行!

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

怎么将一个数组序列化与反序列化????越详细越好!!!可以加分

C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]

C# 如何反序列化简单结构中的 json DATAS 数组?

在C#中解压缩字节数组

C语言32位数据反序的问题

带有命名管道的 C 中的 IPC