c++中的简单序列化示例
Simple serialization example in c++
我有以下结构:
typedef struct{
int test;
std::string name;
} test_struct;
然后,我在主功能中有以下代码:
int main(int argc, char *argv[]){
test_struct tstruct;
tstruct.test = 1;
tstruct.name = "asdfasdf";
char *testout;
int len;
testout = new char[sizeof(test_struct)];
memcpy(testout, &tstruct, sizeof(test_struct) );
std::cout<< testout;
}
但是,没有打印任何内容。怎么了?
sizeof(std::string)总是生成相同的值。它不会提供字符串的运行时长度。要使用memcpy进行序列化,请将结构更改为包含char-array(如char buffer[20]
),或者通过在结构上定义一个方法来计算所需序列化缓冲区的大小,该方法提供字节的运行时长度。如果要使用std::string这样的成员,则需要遍历结构的每个成员并进行序列化。
memcpy(testout, (void *)&tstruct.test, sizeof(int) );
memcpy(testout+sizeof(int), tstruct.name.c_str(),tstruct.name.length() );
在这种情况下,针对整个结构的memcpy将不起作用。
尝试NULL终止字符串并同时发出换行符:
testout = new char[sizeof(test_struct) + 1];
memcpy(testout, &tstruct, sizeof(test_struct));
testout[sizeof(test_struct)] = ' ';
std::cout<< testout << std::endl;
然而,正如user3543576所指出的,从这个过程中获得的序列化不会太有用,因为它将包含字符缓冲区的内存地址,而不是实际的字符串本身。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 是否可以简单地序列化C++对象
- C++中的简单序列化和反序列化
- 序列化/封送C#中的简单对象以通过网络发送,供非托管C++应用程序读取
- 在没有序列化库的情况下,在 c++ 中从结构体读取和写入文件的最简单方法是什么?
- C++Boost.序列化与简单的加载/保存
- 在关闭RTTI的情况下增强简单类的序列化(-fno-rtti)
- c++中的简单序列化示例
- 在C++中序列化/反序列化简单协议的最佳方法