反序列化协议缓冲区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 字符数组转换为 Matlab 字符串 [Matlab 编码器]

c语言字符串数组和字符数组有啥区别?

C中的十六进制到字符数组

在 C++11 中,string::c_str() 指向的数组中的字符可以改变吗?

java中如何将字符串数组保存在数据库里

JSON序列化