ファイルから16進出力を生成する簡単なプログラムを作成しようとしています。これは私の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
実行可能ファイルを持っています。
ここで、そのファイルを読み取り、バイナリ (16 進数) 出力を表示するプログラムを作成しました。これは私のプログラムです:
#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
まったく異なる出力が得られ(フォーマットに関するものではありません)、出力のように約8kではなく、約500行のバイトしかないことです。
xxd 出力: http://pastebin.com/Gw9wg93g
問題はどこだ?読み取り機能に問題はありますfgets(buff, sz, fp);
か?