Я пытаюсь прочитать шестнадцатеричные значения из файла изображения с помощью C. В Linux этот код работает нормально, но в Windows он читает только первые 334 байта, и я не понимаю, почему.
Код для чтения файла:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
void readHexFile(char* path) {
FILE *fp;
if ((fp = fopen (path, "r")) != NULL) {
struct stat st;
stat(path, &st);
int i;
int ch;
for (i = 0; i < st.st_size; i++) {
ch = fgetc(fp);
printf("%x ", ch);
}
fclose(fp);
}
else {
return NULL;
}
}
st.st_size
происходит из пакета <sys/stat.h>
и содержит правильное значение (размер в байтах файла изображения)
Это изображение показывает, что выводит моя программа, и фактическое двоичное содержимое файла, который она читает:
Как вы видите, после последовательности 17
, 18
, 19
есть также шестнадцатеричные значения, но моя программа многократно печатает ffffffff
.
st.st_size comes from package
-- какой пакет? - person Wolf   schedule 26.01.2017fgets
, вероятно, возвращаетEOF
. Вероятно, вы читаете неправильную длину или используете неправильный файл. - person LPs   schedule 26.01.2017feof(fp)
- person Wolf   schedule 26.01.2017fopen()
используете файл в двоичном режиме. Это существенная разница для unix/windows. Он всегда бинарный в unix и linux. - person infixed   schedule 26.01.2017