gpt4 book ai didi

c - 以十六进制打印 : program adds additional 0xFFs

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

我正在尝试一次读取两个字节的二进制文件并显示结果。我想出了以下内容:

int main() {
char opcode[2];
FILE *fp;

fp = fopen("games/PONG", "rb");

while( fread(opcode, 1, 2, fp) != 0 ) {
printf(" %02X%02X\n", opcode[0], opcode[1]);
}
}

它有点有效:

$ ./c8disas
6A02
6B0C
6C3F
6D0C
FFFFFFA2FFFFFFEA
FFFFFFDAFFFFFFB6
FFFFFFDCFFFFFFD6
6E00
...

输出中的某些行包含额外的 FF 字节,我不明白它们来自哪里。

作为引用,这是我正在阅读的二进制文件:

$ hexdump -C games/PONG
00000000 6a 02 6b 0c 6c 3f 6d 0c a2 ea da b6 dc d6 6e 00 |j.k.l?m.......n.|
00000010 22 d4 66 03 68 02 60 60 f0 15 f0 07 30 00 12 1a |".f.h.``....0...|
00000020 c7 17 77 08 69 ff a2 f0 d6 71 a2 ea da b6 dc d6 |..w.i....q......|
00000030 60 01 e0 a1 7b fe 60 04 e0 a1 7b 02 60 1f 8b 02 |`...{.`...{.`...|
00000040 da b6 60 0c e0 a1 7d fe 60 0d e0 a1 7d 02 60 1f |..`...}.`...}.`.|
...

最佳答案

默认情况下,

char 通常是有符号整数。因此,在传递给 printf() 之前,当将其扩展为 int 时,高位将进行符号扩展。请改用unsigned char

您还可以使用 AND (&) 与 0xff 来去除其他位,但您实际上应该在此处使用无符号值。

关于c - 以十六进制打印 : program adds additional 0xFFs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32746532/

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