如何在C ++中使用字符串字段序列化结构?

时间:2015-03-23 12:03:10

标签: c++

我有一个名为Message的数据结构,我需要将其转换为一系列字符以通过网络发送。问题是struct还包含一个字符串字段,并且此字段无法正确转换。我是C ++和C编程的新手,所以我没有意识到这将是一个问题。这是代码

typedef struct {
  int id;
  string content;
} Message;

Message msg;
....
send_message(reinterpret_cast<char*>(msg));

1 个答案:

答案 0 :(得分:3)

在工作中,我做了一个带有模板方法的类,用于序列化(进入char数组)基本类型和一些std类型,如vector和string。

class MySerializer{
public:
    // serialize operator
    template<typename T>
    friend MySerializer& operator<<( MySerializer&, const T&);

    // deserialize operator
    template<typename T>
    friend MySerializer& operator>>( MySerializer&, T& );
private:
    std::vector<unsigned char> v;
};

然后,如果需要序列化自定义类型,可以根据需要添加特化。对于基本类型,您可以copy将它们逐字节转换为v。自定义类型需要更多工作。例如,让我们看看如何序列化std::string

对于此用例,您可以将std::string看作一对size_t,其中存储string的大小,char*指向字符串& #39; s chars。序列化字符串时,可以将其string::size()(例如,uint32_tuint64_t投放到序列化程序中,然后从序列化程序中复制到序列化程序string::size() string::c_str()。当您反序列化时,首先需要从序列化器中读取字符串的大小,然后将正确数量的字符放入输出string

您可能也对我的this question感兴趣。