2013-11-09 4 views
2

Всю ночь я искал ответы на этот вопрос & еще не спал, но я не могу заставить его работать ... У меня есть двоичный файл, и я хочу прочитать это и принимать значение каждого целого ... Вот код:Чтение двоичных целых чисел из файла в C

FILE *f; 
char ch; 
char t1[3]; 
int l, c, grayScale, i, j; 
int p =0; 


f = fopen(pgm, "rb"); 

(...) 

c = 0; 
l = 0; 


fscanf(f, "%d", &c); 

fscanf(f, "%d", &l); 

fscanf(f, "%d", &grayScale); 


A = alocar_memoria_matriz(l,c); 

for(i = 0; i<l; i++){ 
    for(j=0; j<c; j++){ 
     if(fread(&p,sizeof(int),1,f) !=1){ 
      fprintf(stderr, "\nError!\n"); 
      fclose(f); 
      free_memoria_matriz(A,l); 
      return NULL; 
     }else if(p>grayScale|| p<0){ 
      fprintf(stderr, "\nError!\n"); 
      fclose(f); 
      free_memoria_matriz(A,l); 
      return NULL; 
     }else{ 
     A[i][j] = (tdf_elemento) p; 

    } 
} 
} 

Я некоторые printf этого р (с% г и% I) и я получаю значения как -1161602550, 1213357911, 994462027 ... Я действительно не знаю, что происходит, я также попытался изменить p для char [5], но не работал до сих пор ... Заранее спасибо ...

+0

Каков размер целых чисел в двоичном файле? Тип 'int' представляет собой 32-разрядное целое (подписанное), но файл может содержать 16-разрядные целые числа (' short' или 'ushort' для unsigned). – groverboy

+0

Сначала вы читаете fscanf(). Вы уверены, что указатель файла находится в правильном положении после этого для чтения двоичных целых чисел? – Machtl

+0

fscanf в порядке, есть магическое число, «PX» в ascii и более 3 ints в ascii перед двоичным –

ответ

2

«двоичный» режим открытия не меняет способ fscanf анализирует файл. Его единственный эффект заключается в том, чтобы (возможно) предотвратить преобразование окончаний строки \r\n в \n, поскольку файл считывается средствами stdio.

Чтобы прочитать из файла stdio f в целое число i, вы можете сделать fread(& i, sizeof i, 1, f). Но обратите внимание, что это не соответствует действительности. Без явной замены байтов ваш двоичный формат будет зависящим от платформы по контенту.

+0

fscanf в порядке, есть магическое число «PX» в ascii и более 3 ints в ascii до двоичный, строки, столбцы и серая шкала и приходит в ascii –

+0

@ JoãoSilva Если это решило проблему, пожалуйста, примите ее. Если есть еще одна проблема, пожалуйста, откройте новый вопрос. – Potatoswatter

+0

Это не решило, но завтра я встречусь с учителем, потому что он его решает ... Спасибо за помощь –

Смежные вопросы