我编写了一个代码,在其中我将代码写入二进制文件中,而不是使用增强内存映射来读取它,但是每当我显示结果不正确时,它只会将值显示为
1852795252
。我该怎么办?这是我的代码:
#include <iostream>
#include <vector>
#include <utility>
#include <fstream>
#include <utility>
#include <fstream>
#include <iterator>
#include <string>
#include <boost/interprocess/file_mapping.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <iostream>
#include <fstream>
#include <boost/serialization/map.hpp>
using namespace boost::archive;
using namespace boost::interprocess;
void save()
{
{
std::ofstream file{"archive1.bin"};
text_oarchive oa{file};
std::map<int,int> m;
m[3] = 9;
oa << m;
}
}
void load()
{
file_mapping fm("archive1.bin", read_only);
mapped_region region(fm, read_only);
int * m = (int *)region.get_address();
std::cout<<m[3]<<std::endl;
}
int main()
{
save();
load();
}
答案 0 :(得分:1)
问题是您没有向archive1.bin
写您认为正在写的东西。可以通过添加以下行来证明这一点:
text_oarchive oa2 {std::cout};
oa2 << m;
在函数save
的末尾,执行此操作时,您会看到:
22序列化::归档17 0 0 1 0 0 0 3 9
打印到stdout
。
为进一步说明,请将函数load
的最后一行更改为:
std::cout << std::hex << m[3] << std::endl;
然后您看到:
6e6f6974
它是ASCII noit
,即archive1.bin
中的第四个整数。
所有这些都是说约翰在上面的评论中所说的长篇大论。您应该使用approved serialisation functions阅读增强存档。