gpt4 book ai didi

c - 以十六进制格式获取文件 - 我的输出与 xxd 命令输出

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:02 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的程序来从文件中生成十六进制输出。这是我的 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

所以我有两个 可执行文件。

现在,我编写了一个程序来读取该文件并显示它的二进制(十六进制)输出。这是我的程序:

#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); 有问题吗?

最佳答案

fgets() 在 EOF 或换行符 后停止读取。但是您的代码总是循环 sz 次。

fgets() 不是读取二进制数据的正确函数。您可以改用 fread()

关于c - 以十六进制格式获取文件 - 我的输出与 xxd 命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com