gpt4 book ai didi

c - 以十六进制逐字节打印打开文件

转载 作者:行者123 更新时间:2023-11-30 14:48:12 25 4
gpt4 key购买 nike

这里是 C 程序员新人。

我正在尝试打开一个 .obj 文件(包含 LC3 指令)并以 2 字节为一组以十六进制逐行打印它们。我尝试打开文件并逐个字符迭代并以十六进制打印,但我不确定如何将字节分组为 2 个组以将它们打印在一起。我还打印出一组以 1 开头的“fffffff”字节(我假设)。

void readFile(const char *fileName) {
FILE *file;

file = fopen(fileName, "rb");

char ch;
while ((ch = fgetc(file)) != EOF) {
if (isprint(ch)) {
printf("%x", ch);
}
else {
printf("%02x", ch);

if (ch == '\n') {
fputs("\n", stdout);
}
}
}
fclose(file);
}

我希望实现的输出是:

0x4500
0x2009
0xe209
0xa409

但我得到:

0x45 
0020
09fffffffe209fffffffa40956

我知道十六进制正在打印多余的“ffffffff”,因为不是无符号字符,但我正在努力打印接近所需的输出。任何有关以 2 字节组打印或如何删除“ffffffff”的帮助将不胜感激,我真的很挣扎。

最佳答案

getchar() 函数系列(包括 getc()fgetc() )的行为都相似;他们return an int, not a char 。将值读入 int 并快乐地生活。

void readFile(const char *fileName)
{
FILE *file = fopen(fileName, "rb");
if (file == 0)
return;

int ch;
while ((ch = fgetc(file)) != EOF)
{
printf("0x%.2x", ch);
if ((ch = fgetc(file)) == EOF)
break;
printf("%.2x\n", ch);
}
putchar('\n');

fclose(file);
}

如果文件中有偶数个字节,您将在末尾得到一个额外的换行符。如果这是一个问题,请记录您是在顶部退出循环(不需要换行符)还是从中间退出循环(需要换行符)。

关于c - 以十六进制逐字节打印打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50576397/

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