Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 14

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

06.06.2014, 14:55. Показов 1661. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
7. По заданному двоичному файлу с произвольным содержанием создать новый двоичный файл, у которого байты переставлены в обратном порядке. Вывести содержимое исходного и итогового файлов на экран.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2014, 14:55
Ответы с готовыми решениями:

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

Файл: Создать новый файл, содержащий числа исходного файла в обратном порядке.
пожалуйста, помогите задача: дан файл целых чисел, создать новый файл содержащий те же файлы, но в обратном порядке. вот код, он всегда...

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

7
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
06.06.2014, 19:48
Зачем дублировать темы: Переставить байты исходного файла в обратном порядке ?
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
06.06.2014, 20:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream>
 
int main()
  {
  std::ifstream source("source.txt", std::ios::binary);
  std::ofstream destination("destination.txt", std::ios::binary);
  
  source.seekg(-1, source.end);
  while (source.good())
    {
    char temporary_char;
    source.get(temporary_char);
    destination.write(&temporary_char, 1);
    source.seekg(-2, source.cur);
    }
  return 0;
  }
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
07.06.2014, 07:59
Для вывода на экран годится, но для файла мегабайт этак на 500 - нет. Специально проверил - скорость ~0.1мег/сек (а для эффективного алгоритма должна быть ~50мб/сек).
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
07.06.2014, 11:19
Цитата Сообщение от zer0mail Посмотреть сообщение
Для вывода на экран годится, но для файла мегабайт этак на 500 - нет. Специально проверил - скорость ~0.1мег/сек (а для эффективного алгоритма должна быть ~50мб/сек).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <iterator>
#include <vector>
 
int main()
  {
  std::ifstream source("source.txt", std::ios::binary);
 
  source.seekg(0, source.end);
  std::vector<char> buffer(static_cast<size_t>(source.tellg()));
  source.seekg(0, source.beg);
  source.read(&buffer[0], buffer.size());
  source.close();
 
  std::ofstream destination("destination.txt", std::ios::binary);
  std::copy(buffer.rbegin(), buffer.rend(), std::ostream_iterator<char>(destination));
  return 0;
  }
Вот целиком Находишь оптимальный размер буфера и делаешь золотую середину между "весь файл в памяти" и "буфер 1 байт". Есть такая утилитка "tac", сорцы в свободном доступе. Можно в них посмотреть, как правильно это делать. Не бенчмаркал, хз как острим_итератор себя поведет по скорости Мб быстрее будет развернуть вектор целиком в памяти и уже подать цельным куском офстриму.
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
08.06.2014, 12:32
Я просто читал с конца по мегабайту, копировал в обратном порядке в другой буфер и записывал. Получилось ~50 мб/сек
Интересно, сколько гиг можно запихать в вектор и как долго будет копироваться?

Добавлено через 11 часов 32 минуты
Если копировать 200 Мб (такой файл целиком влезает в память), то скорость ~0.25Мб/сек
1 Гиг тоже копируется, но немного медленней, а 1.9Гиг не влезает в память (ОС WinXP 32)...

Вывод: не надо искать сложных медленных решений там, где работают простые и быстрые
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
08.06.2014, 13:16
Цитата Сообщение от zer0mail Посмотреть сообщение
Я просто читал с конца по мегабайту, копировал в обратном порядке в другой буфер и записывал. Получилось ~50 мб/сек
Интересно, сколько гиг можно запихать в вектор и как долго будет копироваться?

Добавлено через 11 часов 32 минуты
Если копировать 200 Мб (такой файл целиком влезает в память), то скорость ~0.25Мб/сек
1 Гиг тоже копируется, но немного медленней, а 1.9Гиг не влезает в память (ОС WinXP 32)...

Вывод: не надо искать сложных медленных решений там, где работают простые и быстрые
1*666*713*278 обработало за
Finished reading file (18517 ms)
Finished reversing (1170 ms)
Finished saving (10935 ms)
~ 54429622 B/s
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <fstream>
#include <vector>
#include <Windows.h>
 
int main()
  {
  unsigned long long ticks1 = GetTickCount64();
  std::ifstream source("C:/Users/Nekto/Downloads/VIDEO/Supernatural.S09E20.Bloodlines.1080p.WEB-DL.DD5.1.H.264-ECI [PublicHD]/Supernatural.S09E20.Bloodlines.1080p.WEB-DL.DD5.1.H.264-ECI.mkv", std::ios::binary);
 
  source.seekg(0, source.end);
  std::vector<char> buffer(static_cast<size_t>(source.tellg()));
  source.seekg(0, source.beg);
  source.read(&buffer[0], buffer.size());
  unsigned long long ticks2 = GetTickCount64();
  std::cout << "Finished reading file (" << ticks2 - ticks1 << " ms)" << std::endl;
  source.close();
 
  ticks1 = GetTickCount64();
  std::reverse(buffer.begin(), buffer.end());
  ticks2 = GetTickCount64();
  std::cout << "Finished reversing (" << ticks2 - ticks1 << " ms)" << std::endl;
 
  ticks1 = GetTickCount64();
  std::ofstream destination("destination.txt", std::ios::binary);
  destination.write(&buffer[0], buffer.size());
  ticks2 = GetTickCount64();
  std::cout << "Finished saving (" << ticks2 - ticks1 << " ms)" << std::endl;
  return 0;
  }
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
08.06.2014, 15:50
Нечего себе разница! Я собирал в VS 2010 на WindowsXP. Читает быстро, а пишет очень медленно (200Мб).
Пересобрал в Windows7 64 без отладки. Получилось 4Мб/сек. Конечно, лучше чем было, но до ~50Мб/сек далеко...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2014, 15:50
Помогаю со студенческими работами здесь

Создать новый файл, содержащий все строки исходного файла наибольшей длины в обратном порядке
Дан текстовый файл. Создать новый файл, содержащий все строки исходного файла наибольшей длины в обратном порядке

Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наибольшей длины (в обратном порядке)
Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наибольшей длины (в обратном порядке). Дана...

Программа, переписывающая все байты входного файла в выходной файл в обратном порядке
Выполнение работы заключается в написании и отладке программы по одному из вариантов задания (п.6). Ввод текста программы и его...

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке
Пожалуйста, помогите решить задачу в C++!!! Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но...

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке
Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке.


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru