Alrott SlimRG Asked:2020-10-06 14:09:14 +0800 CST2020-10-06 14:09:14 +0800 CST 2020-10-06 14:09:14 +0800 CST 序列化 std::string 772 实际上,有一个类: class MyClass{ const uint64_t UUID; const std::string Version; const uint32_t blocksize; } 如何将其写入文件? c++ 1 个回答 Voted Best Answer Harry 2020-10-06T14:31:34+08:002020-10-06T14:31:34+08:00 好吧,我会做这样的事情......我重新制作它是struct为了不弄乱访问,并将它const从字段中删除 - 因为编写常量字段很容易,但读取不是:你不应该更改常量对象。除非在构造函数中完成读取,例如初始化...... struct MyClass { MyClass (uint64_t uuid, const char * s, uint32_t b):UUID(uuid), Version(s),blocksize(b){} uint64_t UUID; std::string Version; uint32_t blocksize; ostream& write(ostream& os) const; istream& read(istream& is); }; ostream& MyClass::write(ostream& os) const { os.write((char*)&UUID,sizeof(UUID)); size_t s = Version.size(); os.write((char*)&s,sizeof(s)); os.write(Version.c_str(),s); os.write((char*)&blocksize,sizeof(blocksize)); return os; } istream& MyClass::read(istream& is) { is.read((char*)&UUID,sizeof(UUID)); size_t s; is.read((char*)&s,sizeof(s)); Version.resize(s); is.read(Version.data(),s); is.read((char*)&blocksize,sizeof(blocksize)); return is; } 好吧,作为一个使用示例: int main(int argc, const char * argv[]) { MyClass a(1,"xyz",3); MyClass b(4,"s",8); ofstream out("data",ios::binary); a.write(out); out.close(); ifstream in("data",ios::binary); b.read(in); in.close(); cout << b.UUID << endl; cout << b.Version << endl; cout << b.blocksize << endl; } 自己检查一切是否正常。 作为不想使用的编译器的一个选项.data()- Version.resize(s); is.read(Version.data(),s); 取而代之 char * buf = new char[s]; is.read(buf,s); Version.assign(buf,buf+s); delete[] buf;
好吧,我会做这样的事情......我重新制作它是
struct
为了不弄乱访问,并将它const
从字段中删除 - 因为编写常量字段很容易,但读取不是:你不应该更改常量对象。除非在构造函数中完成读取,例如初始化......好吧,作为一个使用示例:
自己检查一切是否正常。
作为不想使用的编译器的一个选项
.data()
-取而代之