파일에서 16 진수 출력을 생성하는 간단한 프로그램을 작성하려고합니다. 16 진수 형식의 파일 가져 오기 - 내 출력 대 xxd 명령 출력
gcc -std=c99 -Wall -Wextra -pedantic-errors two.c -o two
그래서 난
two
실행 파일이이 방법으로 컴파일 된
#include <stdio.h>
int
main(void) {
printf("%s\n", "Hello");
return 0;
}
: 이것은 내 two.c
파일입니다.
이제 파일을 읽고 이진 (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
문제는, 내가 (이 형식에 대한 아니라) 완전히 다른 결과를 얻고있다거야 리눅스 명령 xxd two > two.hex
을 사용할 때 단지 약 500 줄의 바이트가 아니라 내 출력과 같은 약 8k.
xxd 출력 : http://pastebin.com/Gw9wg93g
문제가? 독서 기능에 문제가 있습니까? fgets(buff, sz, fp);
?
여기'fp = fopen ("two", "rb");'어떤 파일을'two.c'또는'two.o'로 여는가? – Rustam
gcc 컴파일 결과물 인'two' 파일을 열었습니다. – python
.... 그리고 ['while (! feof (fp))'** 잘못된 **] (http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) – WhozCraig