Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поместить содержимое файла raw в двумерный маccив 
:(
    Опции темы
AnnBlack
Дата 3.11.2017, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.11.2017

Репутация: нет
Всего: нет



Кто знает,как поместить содержимое  файла формата *.raw. в двумерный массив типа unsigned char, где значения элементов будут лежать в диапазоне от нуля до 255?
Пыталась сделать по примеру через вывод строк, но в консоль выводит какую то ерунду, по идее там матрица пикселей должна вывестись с числами...Или может это код для нетекстовых изображений вообще не подходит...
  
Код

#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <cstdio>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#define STRLEN 512              //максимальная длина строки
    char** array;               //массив, который в теории должен потом растягиваться до нужных размеров
using namespace std;
int main(int argc, char* argv[])
{
    char* filename;             //имя файла
    int i = 0;          //счетчик
    FILE* fd;                   //дескриптор файла
    char str[STRLEN];           //строка, которая читается из файла
    array = NULL;
    filename = "D:\\\C++\\gabor.raw";       //Имя файла
    fd = fopen(filename, "rt"); //Открываем файл
    while(!feof(fd))
    {
        fgets(str,STRLEN,fd);  //читаем из файла по STRLEN байт
        ++i;                            //Наращиваем счетчик
        array = ( char**)realloc(array,sizeof(char*)*i);         //растягиваем массив на количество символов из файла
        array[i-1] = ( char*)malloc(strlen(str)+1);               //подготавливаем память для копирования строки из файла
        strcpy(array[i-1],str);
    }
    puts("\nEND OF FILE READ\n");   //Для себя пометка, что чтение файла закончилось
    int j = 0;
    //цикл для проверки значений массива
    for(j=0; j<i; j++){
        printf("%s\n",array[j]);
    }
    getch();
}


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  консоль.png 32,68 Kb
PM MAIL   Вверх
feodorv
Дата 3.11.2017, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(AnnBlack @  3.11.2017,  16:32 Найти цитируемый пост)
Или может это код для нетекстовых изображений вообще не подходит...

Нет, не подходит...

ЗЫ Понимаю Вашу фразу как "для нетекстовых файлов"  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
AnnBlack
Дата 3.11.2017, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.11.2017

Репутация: нет
Всего: нет



Да,для нетекстовых файлов имела в виду...

А этот с буфером ? Ну там правда в буфер заносится а не в массив..Блин,просто не представляю как через массив делать
Код
#include "stdafx.h"
using namespace std;
/* fread example: read a complete file */

int main () {
FILE * pFile;//переменная pFile является указателем файла
long lSize;

unsigned char *buffer;//используется для объявления переменной buffer
size_t result;
pFile = fopen ("D:\\\C++\\gabor.raw" , "rb" );//мы передаем переменной pFile некоторую информацию,fopen – это функция в Си, которая используется для того, чтобы открыть файл
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
// obtain file size:
fseek (pFile , 0 , SEEK_END);//ищет позицию файла.0 – смещение Ноль означает, что мы хотим начать запуск с начала.SEEK_END — отчитываем позицию до конца файла
lSize = ftell (pFile);//сохраняем возвращаемое значение ftell() в lSize.
rewind (pFile);//функция перемотки заново открывает файл с начала. Она имеет только один аргумент, указатель на начало файла. Таким образом, файл запущен для повторного использования.

// выделяю память для файла
buffer = (unsigned char*) malloc (sizeof(unsigned char)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);//считывание блока данных из файла в буфер обмена
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
/* the whole file is now loaded in the memory buffer. */
// terminate
fclose (pFile);//брасывает любые буферы, сохраняемые для данного файла, и закрывает файл
cout«buffer; //Выводим значение s1 на экран 
free (buffer);
cin.get();

}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1190 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.