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

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

Войти
Регистрация
Восстановить пароль
 
Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
#1

Копирование в текстовый файл из потока fstream массива типа char - C++

25.06.2014, 20:03. Просмотров 575. Ответов 12
Метки нет (Все метки)

Всем привет!
У меня довольно простой, но очень важный для меня вопрос, ответ на который пока не очевиден...
Если я средствами Windows создал текстовый файл (С помощью notepad.exe), затем записываю в него массив из char, то у меня будет отображаться абракадабра или цифры и английские буквы?
Вопрос появился потому, что я декодирую GIF файл в BMP, затем записываю в буфер void* всю информацию о нем и хочу использовать пиксели из этого буфера. Однако, при копировании этого буфера в файл у меня абракадабра дикая получается... вот я никак и не могу понять: это я буфер неправильно создаю, декодирую что-то не так, или же так и должно быть и нужно wchar_t использовать...
Буду благодарен за помощь! =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2014, 20:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирование в текстовый файл из потока fstream массива типа char (C++):

Сброс массива char в текстовый файл - C++
Я правильно понимаю, что для этого надо сделать массив на один символ длиннее, чем строка, и вписать последним символом '\0'? Вот моя...

Запись в файл и последующее чтение массива типа char - C++
Добрый вечер! Я должен сделать элементарную программу: в текстовом файле изначально лежат координаты клетки, в которой находится ферзь. Они...

Не открывается текстовый файл для чтения (использовал fstream.h) - C++
#include <fstream> #include <string> #include <conio.h> #include <iostream> using namespace std; void main() { ifstream...

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?

Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ? - C++
Ну собственно сабж... std::fstream fs; fs.write((char*)..) В случае бинарного потока я допустим пишу байты функцией write, как...

Как присвоить значение одного из элементов массива типа char переменной типа int? - C++
С++ начал буквально только что так что буду благодарен за терпение и понимание ) Сразу оговорюсь что уже искал ответ но на эту тему...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.06.2014, 20:10 #2
Цитата Сообщение от Divergence Посмотреть сообщение
Однако, при копировании этого буфера в файл у меня абракадабра дикая получается...
Это зависит от способа записи, который выбирается в зависимости от желаемого результата. Если писать бинарные данные - при просмотре в текстовом режиме будет абракадабра.
Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
25.06.2014, 20:22  [ТС] #3
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Это зависит от способа записи, который выбирается в зависимости от желаемого результата. Если писать бинарные данные - при просмотре в текстовом режиме будет абракадабра.
Я записываю fstream в уже созданный текстовый документ, с флагом текстовый документ...
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.06.2014, 20:26 #4
Цитата Сообщение от Divergence Посмотреть сообщение
Я записываю fstream в уже созданный текстовый документ, с флагом текстовый документ...
Код, который файл пишет, покажите.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2014, 22:07 #5
Цитата Сообщение от Divergence Посмотреть сообщение
так и должно быть
Пишите в файл не текстовые данные:
Цитата Сообщение от Divergence Посмотреть сообщение
декодирую GIF файл в BMP, затем записываю в буфер void*
Потом рассматриваете файл в текстовом редакторе (блокноте):
Цитата Сообщение от Divergence Посмотреть сообщение
при копировании этого буфера в файл у меня абракадабра дикая получается
Цитата Сообщение от Divergence Посмотреть сообщение
Я записываю fstream в уже созданный текстовый документ, с флагом текстовый документ...
На то, как будет выглядеть содержимое файла, при открытии в текстовом редакторе, это не влияет, а вот записывать и читать такие данные нужно в бинарном режиме, и используя бинарные методы.
Renji
1901 / 1299 / 291
Регистрация: 05.06.2014
Сообщений: 3,719
25.06.2014, 22:17 #6
Однако, при копировании этого буфера в файл у меня абракадабра дикая получается...
Открывай файл HEX редактором.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 00:32 #7
Вот, кстати, одна из возможных проблем, если файл с не текстовыми данными открывается не в бинарном режиме.
Истинность конца файла
Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
26.06.2014, 01:17  [ТС] #8
Всем спасибо большое за советы!
Изменил тип файла на бинари, заливаю туда инфу, открываю НЕХ редактором.
Но, по прежнему не могу понять это чушь или мой битмап(((
Есть какие-то способы формализовывать, накладывать схему/сетку на бинари файлы, чтобы они отображались хоть как-то понятнее??
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 01:40 #9
Цитата Сообщение от Divergence Посмотреть сообщение
Изменил тип файла на бинари
Это как? Расширение сменили?
Цитата Сообщение от Divergence Посмотреть сообщение
Но, по прежнему не могу понять это чушь или мой битмап(((
Ваш битмап.
Цитата Сообщение от Divergence Посмотреть сообщение
Есть какие-то способы формализовывать, накладывать схему/сетку на бинари файлы, чтобы они отображались хоть как-то понятнее??
Под "как-то понятнее", что подразумевается? Что, собственно, хотите увидеть? Байты - они и есть байты.
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
26.06.2014, 03:37 #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот, кстати, одна из возможных проблем, если файл с не текстовыми данными открывается не в бинарном режиме.
При записи смешнее:

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main()
{
   unsigned char arr[]={0x0A,0x0D};
   FILE* out = fopen("test.txt","w");
   fwrite((void*)arr,sizeof(arr),1,out);
   fclose(out);
   return 0;
}
Запишется три байта.

Цитата Сообщение от Divergence Посмотреть сообщение
Но, по прежнему не могу понять это чушь или мой битмап(((
Что пишется-то? BMP - его показывает любая гляделка. Если структура - структуру и читать. Да, в HEX по известным смещениям. Если только растр - можно сохранить в RAW c именем высотахширинахbpp.raw и смотреть Irfan View.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2014, 03:59 #11
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
При записи смешнее:
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Запишется три байта.
А при чтении ещё смешнее: считается опять два байта.
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
26.06.2014, 04:02 #12
Цитата Сообщение от alsav22 Посмотреть сообщение
А при чтении ещё смешнее: считается опять два байта.
Ну, это если читать будет код того же кодера, если другого - то квест может получить дальнейшее развитие.
Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
27.06.2014, 00:01  [ТС] #13
Народ... я решил создать конкретную тему с реальным примером (то, что именно у меня не получается). Несмотря на все мои старания - все оборачивается провалом... Это описание того, о чем я спрашивал тут но конкретнее.
Если Вам интересно, можете заглянуть:
Вместо информации о пикселях копируется мусор. WIC codecs, CopyPixels
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 00:01
Привет! Вот еще темы с ответами:

Сформировать массив типа bool из массива типа char - C++
Доброго времени суток! После ввода элементов массива вылазит ошибка &quot;Необработанное исключение: System.NullReferenceException ... &quot;...

Аргумент типа char (*)[1000] несовместим с параметром типа char** - C++
Здравствуйте! Есть вот такая структура: #define max 1000 struct expr { char s; int index; };

Добавление в массив типа char * одного элемента типа char - C++
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной для размещения символов строки памяти и длину строки. Нужен...

Аргумент типа char** не совместим с параметром типа const char* - C++
Программа должна позволять заносить в структуру данные и выводить на экран информацию о поездах, следующих до определенной станции: ...


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

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

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