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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
15.02.2013, 23:56     С++ записать в файл двоичный код #1
Есть огромный файл с текстом, расширение *.txt. Как его можно переписать в двоичный код? Как вообще значение какой-то переменную можно записать не текстом, а кодом? Не в ASCII кодировке, а в двоичном коде. Чтобы при открытии блокнотом выводило каракули короче. ПОМОГИТЕ КТО НИБУДЬ. Считываю файл в поток. Он пишет его все равно текстом. Как это изменить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
16.02.2013, 00:15     С++ записать в файл двоичный код #2
может вам посмотреть в сторону сжатия данных без потерь?
ну а, в принципе, вы можете открыть файл в ios_base::binary и писать/читать в него побайтно методами read и write, но насколько эффективно?
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;
}
не работает..пишет просто текст и все((
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:32     С++ записать в файл двоичный код #4
Ты понимаешь, что спрашиваешь? Ты записываешь текст, потом открываешь его приложением, которое понимает байты, как коды символов, и хочешь, чтобы он тебе что показал? Запиши в файл не текстовый файл, открой блокнотом, увидишь каракули.

Добавлено через 1 минуту
Цель какая?
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, которая будет находится в папке проэкта, который ты создашь появятся два БИНАРНЫХ файла..
так вот..надеюсь до тебя дошла суть моего вопроса..мне нужно на выходе получить то же самое..как??
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:40     С++ записать в файл двоичный код #6
Цитата Сообщение от hatko Посмотреть сообщение
Как вообще значение какой-то переменную можно записать не текстом, а кодом?
При бинарной записи и так всё кодом пишется.
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 00:42  [ТС]     С++ записать в файл двоичный код #7
запусти код первого проекта и второго..на выходе в одном - текстовый, в другом бинарный..мне нужно, чтобы бинарный был на обоих выходах..если ты знаешь, как это сделать - напиши..нет - иди лесом..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:43     С++ записать в файл двоичный код #8
Цитата Сообщение от hatko Посмотреть сообщение
надеюсь до тебя дошла суть моего вопроса
А до тебя дошла суть моего ответа?
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 00:44  [ТС]     С++ записать в файл двоичный код #9
твой ответ мне не интересен..я спросил конкретно - как это сделать..ты не ответил..
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
16.02.2013, 00:47     С++ записать в файл двоичный код #10
C++
1
os.write((char*)&buffer, lengthFile);
Только грубить не нужно, не красиво это.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 00:51     С++ записать в файл двоичный код #11
Цитата Сообщение от hatko Посмотреть сообщение
твой ответ мне не интересен..я спросил конкретно - как это сделать..ты не ответил..
Что сделать? Пойми простое. Текстовый файл - это тоже бинарный файл. Отличие в том, что коды в нём, программа, которой он открывается, может представить в виде символов. Если ты пишешь в файл текст, то это значит, что в нём будут только коды, которые такая программа может представить в виде символов, что блокнот и делает. Если хочешь каракули получить, то нужно в файл не текст писать или изменять коды текста на такие, которые блокнот не сможет вывесть нормально. Цель можешь сказать?
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 01:05  [ТС]     С++ записать в файл двоичный код #12
спасибо большое

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

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

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

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

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

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

vua72 если что, то теперь проблема в том, что после запуска происходит
http://pixs.ru/showimage/trublejpg_2236382_7128176.jpg
файл на входе почти 2 мб..в этом проблема?..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 01:18     С++ записать в файл двоичный код #15
Цитата Сообщение от vua72 Посмотреть сообщение
os.write((char*)&buffer, lengthFile);
vua72, ошибки.
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 01:22  [ТС]     С++ записать в файл двоичный код #16
альсав, мне все равно что он из себя представляет..мне нужно не важно для чего, не важно как, получить из него бинарный файл..сколько же ты меня доставать будешь?

мне НИ КАПЕЛЬКИ не интересно какая между этими файлами разница, мне КЛАСТЬ на то, что пишет википедия..просто записать в файл не ASCII символы, а двоичный код..

программа работает для маленьких файлов..мне нужно это же самое сделать с файлом в 2 метра..что нужно изменить в коде?..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 01:28     С++ записать в файл двоичный код #17
Небольшое пояснение напоследок дай и я отстану. Ты пишешь, что программа работает для маленьких файлов. Берёшь небольшой текстовый файл, записываешь его в другой файл и получаешь то, что ты хочешь? Так?
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 01:36  [ТС]     С++ записать в файл двоичный код #18
нет, уже вижу, что не то..какой-то левый текст..не тот, что нужен
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2013, 01:40     С++ записать в файл двоичный код #19
Открой секрет, для чего? Трудно что сказать, если непонятна идея.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2013, 01:44     С++ записать в файл двоичный код
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
hatko
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 14
16.02.2013, 01:44  [ТС]     С++ записать в файл двоичный код #20
это показывать нужно..давай скайп - скину что есть и что нужно

Добавлено через 19 секунд
мыло лучше, а не скайп

Добавлено через 22 секунды
мыло лучше, а не скайп
Yandex
Объявления
16.02.2013, 01:44     С++ записать в файл двоичный код
Ответ Создать тему
Опции темы

Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru