Всю ночь я искал ответы на этот вопрос & еще не спал, но я не могу заставить его работать ... У меня есть двоичный файл, и я хочу прочитать это и принимать значение каждого целого ... Вот код:Чтение двоичных целых чисел из файла в 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], но не работал до сих пор ... Заранее спасибо ...
Каков размер целых чисел в двоичном файле? Тип 'int' представляет собой 32-разрядное целое (подписанное), но файл может содержать 16-разрядные целые числа (' short' или 'ushort' для unsigned). – groverboy
Сначала вы читаете fscanf(). Вы уверены, что указатель файла находится в правильном положении после этого для чтения двоичных целых чисел? – Machtl
fscanf в порядке, есть магическое число, «PX» в ascii и более 3 ints в ascii перед двоичным –