Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поиск подстроки http://www.cyberforum.ru/cpp-beginners/thread1201122.html
Привет всем. Я пишу программу для поиска подстроки. Если подстрока есть в строке, вывести YES. Иначе - NO. Вот код(еще не дописанный) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int search(char a, char b){ int i, j, n, m; n = strlen(a);
C++ Переставить байты исходного файла в обратном порядке 7. По заданному двоичному файлу с произвольным содержанием создать новый двоичный файл, у которого байты переставлены в обратном порядке. Вывести содержимое исходного и итогового файлов на экран. http://www.cyberforum.ru/cpp-beginners/thread1201120.html
C++ Изменение значения указателя
Здравствуйте В коде приведена функция, которая при помощи указателей считывает размер массива и его элементы из файла блокнота. Почему значение, хранящееся в массиве после выполнения цикла самопроизвольно меняется? функция мэйн #include <iostream> #include <stdlib.h> #include <windows.h>
C++ Рекурсивная функция, выводящая на экран все целые числа от N до K, N<K
рекурсивная функция, выводящая на экран все целые числа от N до K, N<K
C++ Написать рекурсивную функцию, выводящую на экран все целые числа в определенном интервале http://www.cyberforum.ru/cpp-beginners/thread1201100.html
рекурсивная функция, выводящая на экран все целые числа от N до K, N<K
C++ Можно ли обратиться к 3 элементу массива ? Если у нас есть int *x, y = { 1,2,3,4,5 }, можно ли обратиться к 3 элементу массива вот так? x=y; *(x+2) Думаю, что нет, так как не взят адрес x=&y А что вобще произойдет при таком условии? x=y подробнее

Показать сообщение отдельно
Nekto
342 / 287 / 10
Регистрация: 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", сорцы в свободном доступе. Можно в них посмотреть, как правильно это делать. Не бенчмаркал, хз как острим_итератор себя поведет по скорости Мб быстрее будет развернуть вектор целиком в памяти и уже подать цельным куском офстриму.
 
Текущее время: 00:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru