我有一个名为Message
的数据结构,我需要将其转换为一系列字符以通过网络发送。问题是struct还包含一个字符串字段,并且此字段无法正确转换。我是C ++和C编程的新手,所以我没有意识到这将是一个问题。这是代码
typedef struct {
int id;
string content;
} Message;
Message msg;
....
send_message(reinterpret_cast<char*>(msg));
答案 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_t
或uint64_t
投放到序列化程序中,然后从序列化程序中复制到序列化程序string::size()
string::c_str()
。当您反序列化时,首先需要从序列化器中读取字符串的大小,然后将正确数量的字符放入输出string
。
您可能也对我的this question感兴趣。