我正在使用 C++ 中的 sstream 对 std::map 进行序列化。序列化功能:
template <class key, class value>
std::string serializeMap(const std::map<key, value>& v){
std::stringstream ss;
std::for_each(v.begin(), v.end(), [&ss](const std::pair<key, value>& s){
ss.write ((char*)&s, sizeof(std::pair<key,value>));
});
return ss.str();
}
并使用此反序列化:
template <class key, class value>
void deSerializeMap(const std::string& s, std::map<key, value>& v){
std::stringstream ss1;
ss1<<s;
int pos = 0;
printf("\nlen %d\n", s.size());
while(ss1){
char* ar = new char[sizeof(std::pair<key, value>)];
ss1.read(ar, sizeof(std::pair<key, value>));
v.insert(*(reinterpret_cast<std::pair<key, value>*>(ar)));
pos+=sizeof(std::pair<key, value>);
ss1.seekg(pos);
delete[] ar;
}
}
这可以使用std::string
. const char*
我必须使用作为参数的 C 函数,我尝试使用c_str()
NULL 字符并将其添加到 char 数组,但strlen
给出了零。有什么我想念的吗?