无法从c ++

时间:2019-06-19 10:35:51

标签: c++ serialization c++14 deserialization

嗨,

我刚刚在c ++中完成了以下操作:- 打开-WINDOWS 10

   //1. Serialize a number into string then write it to file
        std::string filename = "D:\\Hello.txt";
        size_t OriNumber = 26;
        std::string str;
        str.resize(sizeof(size_t));
        memcpy(&str[0], reinterpret_cast<const char*>(&OriNumber), str.size());

        std::ofstream ofs(filename);
        ofs << str << std::endl;
        ofs.close();

        //2. Now read back the string from file and deserialize it
        std::ifstream ifs(filename);
        std::string str1{std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>()};

        // 3. Expect that the string str1 will not be empty here.
        size_t DeserializedNumber = *(reinterpret_cast<const size_t*>(str1.c_str()));
        std::cout << DeserializedNumber << std::endl;

在第3步中,即使我用notepad ++打开文件,它也显示了几个字符,我无法从文件中读取字符串。在最后一行,我们仍然打印了DeserializedNumber的值,但这是由于str1.c_str()现在是带有某些垃圾值的有效指针。

调试该程序后,我发现std:ifstream在文件开头将获得值-1(EOF),作为维基百科的解释,26是替代字符的值,有时被视为EOF。

我的问题是:

  1. 如果我无法从上述文件中读取值26,那么序列化库如何将该值序列化为字节?
  2. 如果我们仍然按照上面的方式序列化值26,我们是否可以通过某种方式正确读取/写入/传输该值?

谢谢

0 个答案:

没有答案