Я пытаюсь написать простую программу для генерации шестнадцатеричного вывода из файла. Это мой two.c
файл:
#include <stdio.h>
int
main(void) {
printf("%s\n", "Hello");
return 0;
}
который был собран таким образом:
gcc -std=c99 -Wall -Wextra -pedantic-errors two.c -o two
поэтому у меня есть исполняемый файл two
.
Теперь я написал программу для чтения этого файла и отображения его двоичного (шестнадцатеричного) вывода. Это моя программа:
#include <stdio.h>
int
fileSize(FILE *ptr) {
int size = 0;
fseek(ptr, 0, SEEK_END);
size = ftell(ptr);
fseek(ptr, 0, SEEK_SET);
return size;
}
int
main(void) {
FILE *fp;
fp = fopen("two", "rb");
int sz = fileSize(fp);
char buff[ sz ];
if (!fp)
printf("%s\n", "Not great at all");
else
while (!feof(fp)) {
fgets(buff, sz, fp);
for (int i = 0; i < sz; i++) {
printf("%02x%02x ", (buff[i] & 0xFF), (buff[i+1] & 0xFF));
if (!(i % 8))
printf("\n");
}
printf("\n");
}
fclose(fp);
}
И вот огромный результат http://pastebin.com/RVLy6H9B
Проблема в том, что когда я использую linux-команду xxd two > two.hex
, я получаю совершенно другой вывод (дело не в форматировании) и всего около 500 строк байтов, а не около 8k, как в моем выводе.
вывод xxd: http://pastebin.com/Gw9wg93g
В чем проблема? Что-то не так с функцией чтения fgets(buff, sz, fp);
?
fp = fopen("two", "rb");
какой файл вы открываетеtwo.c
илиtwo.o
? - person Rustam   schedule 03.10.2014two
файл - результат компиляции gcc. - person python   schedule 03.10.2014while (!feof(fp))
неверно - person WhozCraig   schedule 03.10.2014