данные, отображаемые в память, не поступают правильно - PullRequest
0 голосов
/ 20 февраля 2019

Я написал код, в котором я пишу карту в двоичном файле, а затем читаю ее, используя отображение расширенной памяти, но всякий раз, когда я отображаю результат, он не верен, он показывает значение только как

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();
} 

1 Ответ

0 голосов
/ 20 февраля 2019

Проблема в том, что вы не пишете archive1.bin то, что вы думаете, что пишете.Это можно продемонстрировать, добавив строки:

text_oarchive oa2 {std::cout};
oa2 << m;

в конце функции save, и когда вы сделаете это, вы увидите:

22 сериализация :: архив 170 0 1 0 0 0 3 9

напечатано на stdout.

Для уточнения измените последнюю строку функции load на:

std::cout << std::hex << m[3] << std::endl;

и тогда вы увидите:

6e6f6974

, что является ASCII noit, то есть четвертое целое число в archive1.bin.

Всеиз которых является многословным способом сказать, что Джон говорит в своем комментарии выше.Вы должны прочитать буст-архив, используя одобренные функции сериализации .

Live demo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...