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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
#1

С++ записать в файл двоичный код - C++

15.02.2013, 23:56. Просмотров 2581. Ответов 25
Метки нет (Все метки)

Есть огромный файл с текстом, расширение *.txt. Как его можно переписать в двоичный код? Как вообще значение какой-то переменную можно записать не текстом, а кодом? Не в ASCII кодировке, а в двоичном коде. Чтобы при открытии блокнотом выводило каракули короче. ПОМОГИТЕ КТО НИБУДЬ. Считываю файл в поток. Он пишет его все равно текстом. Как это изменить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2013, 23:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С++ записать в файл двоичный код (C++):

Создать текстовый файл и записать в двоичный файл - C++
В программах необходимо использовать только динамические структуры. 1. Написать первую программу, которая считывает информацию из...

Записать в двоичный файл n случайных целых чисел - C++
записать в двоичный файл n случайных целых чисел, принадлежащих отрезку , в текстовый файл записать случайные целые числа, принадлежащие...

Создать двоичный файл и записать в него 15 чисел - C++
1.создать двоичный файл и записать в него 15 чисел.из исходного файла сформировать массивы чёт. и нечёт. , определить наибольшее чётное и...

Создать двоичный файл и записать в него n целых чисел - C++
Первая программа должна сформировать двоичный файл. Вторая – считать данные из этого файла, выполнить соответствующие вычисления...

Создать двоичный файл и записать в него n целых чисел - C++
Помогите пожалуйста, срочно. Создать двоичный файл и записать в него n целых чисел. Из исходного файла сформировать массивы четных и...

Создать двоичный файл и записать в него n целых чисел - C++
Создать двоичный файл и записать в него n целых чисел. Из исходного файла сфор- мировать массивы четных и нечетных чисел. Определить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.02.2013, 00:15 #2
может вам посмотреть в сторону сжатия данных без потерь?
ну а, в принципе, вы можете открыть файл в ios_base::binary и писать/читать в него побайтно методами read и write, но насколько эффективно?
0
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 00:24  [ТС] #3
я пытаюсь сделать это через ios

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    fstream file("1.txt", ios::in | ios::out);
 
    file.seekg(0, ios::end);
    int lengthFile = file.tellg();
 
    file.seekg(0, ios::beg);
    char *buffer = new char[lengthFile];
 
    file.read(buffer, lengthFile);
 
    ofstream os("text.bin", ios::binary);
    os.write(buffer,lengthFile);
    os.close();
 
    return 0;
}
не работает..пишет просто текст и все((
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:32 #4
Ты понимаешь, что спрашиваешь? Ты записываешь текст, потом открываешь его приложением, которое понимает байты, как коды символов, и хочешь, чтобы он тебе что показал? Запиши в файл не текстовый файл, открой блокнотом, увидишь каракули.

Добавлено через 1 минуту
Цель какая?
0
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 00:37  [ТС] #5
альсав, ты когда-нибудь видел бинарные файлы?..их еще когда в блокноте открываешь, кака выходит?..если не видел, можешь запустить MVS (Microsoft Visual Studio) и создать там проэкт (справишься я думаю), в который помести код
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <fstream>
#include <iostream>
#include <ctime>
using namespace std;
int main()
{   int m[10]={0};
    srand((unsigned)time(NULL));        // инициализация датчика случайных чисел
   /* заполняем массив m числами */
    for(int i = 0; i < 10; i++)
    { m[i] = rand()%10;
      cout << m[i] << ' ';          // контрольный вывод
    }
    cout << '\n';
     /* открываем файл для записи */
    ofstream outstrm ("c:/binfiles/oonumber1.bin", std::ios::binary);
    if(outstrm.is_open())
    { for(int i = 0; i < 10; i++)   // выводим массив в файл поэлементно
        outstrm.write((char *)&m[i], sizeof(int));  
      outstrm.close();
    }
    /* открываем другой файл для записи */
    outstrm.open("c:/binfiles/oonumber2.bin", std::ios::binary);
    if(outstrm.is_open()) 
    { outstrm.write((char*)m, sizeof(m));   // выводим массив в файл 
      outstrm.close();
    }
// вывод двоичного файла на экран 
    // открываем второй файл для чтения 
    {   ifstream instrm ("c:/binfiles/oonumber2.bin", std::ios::binary);
        int a = 0;
        // читаем числа по одному из файла и выводим 
        while(instrm.read((char *)&a, sizeof(int))) 
            cout << a << ' ';
        cout << '\n';
    }
// открываем первый файл для чтения 
  ifstream instrm ("c:/binfiles/oonumber1.bin", std::ios::binary);
  int t[10] = {0};
  instrm.read((char *)t, sizeof(t));    // чтение файла в массив
  instrm.close();                       // закрываем
  for(int i = 0; i < 10; i++)           
        cout << t[I] << ' ';
  cout << '\n';  
 char ch = getchar();
return 0;
}
и откомпилиру..вот..если ты так сделаешь, то в папочке debug, которая будет находится в папке проэкта, который ты создашь появятся два БИНАРНЫХ файла..
так вот..надеюсь до тебя дошла суть моего вопроса..мне нужно на выходе получить то же самое..как??
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:40 #6
Цитата Сообщение от hatko Посмотреть сообщение
Как вообще значение какой-то переменную можно записать не текстом, а кодом?
При бинарной записи и так всё кодом пишется.
0
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 00:42  [ТС] #7
запусти код первого проекта и второго..на выходе в одном - текстовый, в другом бинарный..мне нужно, чтобы бинарный был на обоих выходах..если ты знаешь, как это сделать - напиши..нет - иди лесом..
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:43 #8
Цитата Сообщение от hatko Посмотреть сообщение
надеюсь до тебя дошла суть моего вопроса
А до тебя дошла суть моего ответа?
0
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 00:44  [ТС] #9
твой ответ мне не интересен..я спросил конкретно - как это сделать..ты не ответил..
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.02.2013, 00:47 #10
C++
1
os.write((char*)&buffer, lengthFile);
Только грубить не нужно, не красиво это.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:51 #11
Цитата Сообщение от hatko Посмотреть сообщение
твой ответ мне не интересен..я спросил конкретно - как это сделать..ты не ответил..
Что сделать? Пойми простое. Текстовый файл - это тоже бинарный файл. Отличие в том, что коды в нём, программа, которой он открывается, может представить в виде символов. Если ты пишешь в файл текст, то это значит, что в нём будут только коды, которые такая программа может представить в виде символов, что блокнот и делает. Если хочешь каракули получить, то нужно в файл не текст писать или изменять коды текста на такие, которые блокнот не сможет вывесть нормально. Цель можешь сказать?
0
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 01:05  [ТС] #12
спасибо большое

я не тебе грубил..просто этот парень у меня в предыдущей теме это спросил - я ему ответил..он о5 "что?" и "зачем?" + нравоучения что и как правильно..

кроме спасибо - не работает..выкидывает из программы

vua72 если тебе скучно, или хочется помочь - поделись скайпом, я более подробно изложу проблему

Добавлено через 13 минут
цель: получить на выходе бинарный файл
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 01:13 #13
Могу только повторить.
Цитата Сообщение от alsav22 Посмотреть сообщение
Пойми простое. Текстовый файл - это тоже бинарный файл.
Цитата из Википедии:
"Двоичный (бинарный) файл — в широком смысле: последовательность произвольных байтов. Название связано с тем, что байты состоят из бит, то есть двоичных (англ. binary) цифр.

В узком смысле слова двоичные файлы противопоставляются текстовым файлам. При этом с точки зрения технической реализации на уровне аппаратуры, текстовые файлы являются частным случаем двоичных файлов, и, таким образом, в широком значении слова под определение «двоичный файл» подходит любой файл."

Добавлено через 1 минуту
Цитата Сообщение от hatko Посмотреть сообщение
цель: получить на выходе бинарный файл
Для чего нужно?
0
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 01:17  [ТС] #14
да, точно..спасибо..это решило проблему))

vua72 если что, то теперь проблема в том, что после запуска происходит
http://pixs.ru/showimage/trublejpg_2236382_7128176.jpg
файл на входе почти 2 мб..в этом проблема?..
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 01:18 #15
Цитата Сообщение от vua72 Посмотреть сообщение
os.write((char*)&buffer, lengthFile);
vua72, ошибки.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2013, 01:18
Привет! Вот еще темы с ответами:

Создать новый двоичный файл и записать в него матрицу - C++
Доброе утро Всем!Помогите решить задание! На языке СИ в Двоичном файле записанна по строкам матрица 20*20 типа int. Создать новый...

Как создать двоичный файл и записать в него n целых чисел? - C++
народ!как создать двоичный файл и записать в него n целых чисел. Из файла сформировать массив, записав в него только ненулевые компоненты,...

Записать в двоичный файл строку, потом считать ее и вывести на экран - C++
Здравствуйте! Помогите советом или реализацией)

Записать в двоичный файл столбцы массива, у которых первый и последний элементы имеют одинаковые значения - C++
Создать двоичный файл и записать в него двумерный целочисленный массив размером n×m. Записать в двоичный файл F2 те столбцы массива, у...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.02.2013, 01:18
Ответ Создать тему
Опции темы

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