我想知道当我写的时候会发生什么:
object.write((char*)&class_object, sizeof(class_object));
// or
object.read((char*)&class_object, sizeof(class_object));
到目前为止,根据我的阅读,class_object
已转换为指针。但我不知道它是如何设法将对象携带的数据转换成二进制的。二进制实际上代表什么?
我是初学者。
编辑
你能解释一下当我们写上面这段代码时到底发生了什么吗?我的意思是,当我们写 (char*)*S 时实际发生了什么,说 S 是我声明的类的对象?
最佳答案
这样想象,如果将类转换为 char 指针,则类实例只是 RAM 中的一些内存块:
SomeClass someClassInstance;
char* data = reinterpret_cast<char*>(&someClassInstance);
它将指向您内存中的相同数据,但在您的程序中它将被视为字节数组。
如果你把它转换回来:
SomeClass* instance = reinterpret_cast<SomeClass*>(data);
它又会被当作类来对待。
因此,为了将您的类写入文件并稍后重建它,您只需将 data
写入某个文件,该文件的大小为 sizeof(SomeClass)
然后读取文件并将原始字节转换为类实例。
但是,请记住,您只能在类(class)为 POD 时执行此操作(普通旧数据)!
关于c++ - 读写类对象到二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46948604/