#include <iostream.h>
#include <stdio.h>
void main( void )
{
FILE *file;
char* file_name = "VMRImage5.bmp";
char load_string[1658934] ;
file = fopen( file_name, "rb" );
//fread(load_string, 4, 1, file);
fgets( load_string, 4 , file );
cout << "load_string = " << load_string << endl;
fclose(file);
}
Чтение бинарных файлов
И запихнуть каждыйблок в структуру для того чтоб обратиться к каждому значению отдельно.
Проблемка у меня в том что байты в начале могут быть нулевыми,т.е.функции fread,fgets просто нечитают остальные, а со scanf я ужу мозги скрутил,не могу разобраться.
Спасибо.
Код:
Да согласен что в примере структурами и не пахнет, но все же надо бы с ними.
Правда зачем мешать С-ные функции и потоки C++?
Цитата: aks
Исспользуй fread.
Правда зачем мешать С-ные функции и потоки C++?
Правда зачем мешать С-ные функции и потоки C++?
Так яж говорю
Проблемка у меня в том что байты в начале могут быть нулевыми,т.е.функции fread,fgets просто нечитают остальные.
У тебя кажись не fread несчитывает, а cout не выводит :)
Цитата: __AleXX__
У тебя кажись не fread несчитывает, а cout не выводит :)
А чего сможеш посоветовать?
например так:
Код:
void main( void )
{
FILE *file;
char* file_name = "VMRImage5.bmp";
int buf = 0;
file = fopen( file_name, "rb" );
fread(&buf, sizeof(buf), 1, file);
cout << "buf = " << buf << endl;
fclose(file);
}
{
FILE *file;
char* file_name = "VMRImage5.bmp";
int buf = 0;
file = fopen( file_name, "rb" );
fread(&buf, sizeof(buf), 1, file);
cout << "buf = " << buf << endl;
fclose(file);
}
Это примерчик для int.
Эсли что, спрашивай. Вечером отвечу.
Цитата: __AleXX__
Ты считываешь fread-ом бинарные данные -> выводить надо как бинарные;
например так:
Это примерчик для int.
Эсли что, спрашивай. Вечером отвечу.
например так:
Код:
void main( void )
{
FILE *file;
char* file_name = "VMRImage5.bmp";
int buf = 0;
file = fopen( file_name, "rb" );
fread(&buf, sizeof(buf), 1, file);
cout << "buf = " << buf << endl;
fclose(file);
}
{
FILE *file;
char* file_name = "VMRImage5.bmp";
int buf = 0;
file = fopen( file_name, "rb" );
fread(&buf, sizeof(buf), 1, file);
cout << "buf = " << buf << endl;
fclose(file);
}
Это примерчик для int.
Эсли что, спрашивай. Вечером отвечу.
не знаю причем здесь sizeof.
но выводит чтото типа 1108 хотя я надеялся на весь файл
Цитата: vander1
Так яж говорю
Проблемка у меня в том что байты в начале могут быть нулевыми,т.е.функции fread,fgets просто нечитают остальные.
Проблемка у меня в том что байты в начале могут быть нулевыми,т.е.функции fread,fgets просто нечитают остальные.
Функции fread абсолютно "по барабану" какие байты считывать, что нулевые, что ненулевые. Ну а оператор <<, перегруженный для char *, само собой будет выводить символы только до нулевого, т.к. считает, что это конец строки. Хотите выводить содержимое бинарного файла на экран, используйте printf с соотвествующей форматной строкой.
Где в примере написано что считывается весь файл?
Весь файл надо считывать в цикле. функция feof() вроде должна вернуть true если пришел конец файла.
Какой смысл в том что я напишу тебе весь код? такого кода обычно хватает и в учебниках.
Да ты оказался прав,+ неправильное выделение памяти
Спасибо за помощ
char* file_name = "VMRImage5.bmp";
но хорошо, что сам до этого дошел :) так всегда интереснее
#include <iostream.h>
#include <stdio.h>
#include <fstream.h>
#define size 1658880
void main( void )
{
FILE *file;
char* file_name = "VMRImage5.bmp";
char * load_string = new char[size];
file = fopen( file_name, "rb" );
//41470
for (int qw =0;qw<1658880;qw++)
{
int n=0;
fread(load_string, 1, 1, file);
printf("%d ",(int) load_string[n] );
}
fclose(file);
}
ну еще в с труктуру запихнуть и все
printf("%d ",(int) load_string[n] );
преобразует A9 в -87 а не в 169
Кто чо знает подскажите плиз
И вообще, зачем создавать такой массив char-ов, если используешь реально только первый его элемент?
Или это не весь код?
Цитата: __AleXX__
попробуй приводить к unsigned int.
И вообще, зачем создавать такой массив char-ов, если используешь реально только первый его элемент?
Или это не весь код?
И вообще, зачем создавать такой массив char-ов, если используешь реально только первый его элемент?
Или это не весь код?
Не, не прокатывает,как было так и осталось.:-(
Цитата: vander1
Не, не прокатывает,как было так и осталось.:-(
Сорри, я тукан. Преобразование там вообще ни к чему. У тебя неправильная формат-строка, должно быть: "%u"
Неа, вооще там где минусы число десятизначное выдает.а точнее верхняя граница диапазона типа - (минус) тот бред о котором я говорил выше
Всем огромное спасибо.