Форум программистов, компьютерный форум, киберфорум
Наши страницы
Boost C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Ghostman23
0 / 0 / 1
Регистрация: 20.01.2013
Сообщений: 44
1

Бинарное чтение/запись переменной из Multiprecision в бинарный файл

09.02.2015, 20:28. Просмотров 771. Ответов 2
Метки нет (Все метки)

Подскажите, пожалуйста, как можно считать/записать бинарно файл используя переменную целочисленного типа из Boost.Multiprecision
Например так:
C++
1
2
3
4
5
6
7
8
9
10
11
ifstream in("picture.jpg", ios::binary | ios::in);
ofstream out("out.jpg", ios::binary | ios::out);
unsigned long num;
while (!in.eof())
{
    in.read((char*)&num, sizeof(unsigned long)); 
    //Тут что то делаю с num
    out.write((char*)&num, sizeof(unsigned long));
}   
in.close(); 
out.close();
Как сделать то же самое, но с типами из <boost/multiprecision/cpp_int.hpp>? Например uint128_t, uint256_t или cpp_int. И возможно ли это вообще?
Если считывать и сразу после этого записывать, ничего больше не делая, то всё хорошо работает. Но Если я пытаюсь вывести переменную num на какой то итерации цикла или после цикла или любые другие операции с переменной num, то у меня вылетает ошибка обращения к памяти.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2015, 20:28
Ответы с готовыми решениями:

Чтение и запись в бинарный файл
Записываю текст из Memo в бинарный файл, потом в другой программе пытаюсь считать текст из этого...

Чтение и запись в бинарный файл
Ребят nомогите мне nожалуйста. Я хочу nрочитать бинарный файл , в котором заnисаны данные в виде...

Чтение и запись в бинарный файл
Добрый день! Помогите разобраться. Надо записать информацию в бинарник, а потом прочесть из него...

Чтение и запись в бинарный файл
Мой код должен решать следующую задачу: Даны два файла f 1 и f 2. Файл f 1-это инвентарный файл,...

Запись и чтение структуры в бинарный файл
Несмотря на попытку изучения этого вопроса и способов переопределения потокового ввода &gt;&gt; и вывода...

2
Nick Alte
Эксперт С++
1652 / 1024 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
09.02.2015, 21:39 2
cpp_int поддерживает бустовскую сериализацию, преобразование в строковый вид и обратно, или же можно проявить хитрость и смекалку пополам с велосипедизмом и читать-писать число бинарными кусками.
0
Ghostman23
0 / 0 / 1
Регистрация: 20.01.2013
Сообщений: 44
14.02.2015, 09:33  [ТС] 3
Не было времени решать данную задачу. Вот сейчас опять вернулся к ней.
В общем, с велосипедом получилось так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ifstream in("img/original.jpg", ios::binary | ios::in);
ofstream out("img/out.jpg", ios::binary | ios::out);
uint128_t num;
uint64_t buff[2];
long count = 0;
while (!in.eof())
{
    count++;
    //in.read((char*)&num, 16);
    in.read((char*)&buff, 16);
    num = buff[1];
    num <<= 64;
    num += buff[0];
    cout << num << endl;
    //Просто для теста, что я могу проводить операции над num
    num -= 100;
    num += 100;
 
    out.write((char*)&num, 16);
}
in.close();
out.close();
cout << "count = " << count;
Это работает правильно.
Как я понял при считывании сразу в uint128_t он считывает биты правильно, но неправильно преобразует их в числовую переменную.
потому что, если я пишу
C++
1
2
in.read((char*)&num, 16); 
out.write((char*)&num, 16);
, то всё работает правильно, но как только я добавляю
C++
1
2
3
4
in.read((char*)&num, 16); 
num -= 100;
num += 100;
out.write((char*)&num, 16);
вывод получается неправильный.
Никак не могу понять как работает эта сериализация. Нигде нет нормальной документации как для чего и зачем использовать те или иные функции из boost. А по исходникам я не могу понять как правильно использовать.
Может кто знает как правильно использовать сериализацию в моём примере? Был бы очень благодарен! Было бы очень интересно сравнить скорости работы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2015, 09:33

Запись/чтение структуры в бинарный файл
Здравствуйте, не могли бы объяснить, как работать с QDataStream? Читаю документацию и что-то...

Запись в бинарный файл и чтение из него
Нужно записать в бинарный файл блоки, каждый по 512 байт. Структура блока: Слово Число. На слово...

Запись/Чтение структуры в файл (бинарный)
Всем привет! у меня такая задачка, очень простая. Нужно записать структуру в файл, а потом хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru