【发布时间】:2018-12-15 21:44:46
【问题描述】:
我正在尝试逐字节读取文件,然后使用 C 将其打印出来,但输出与十六进制编辑器的显示不匹配。
在十六进制编辑器中,前 2 行如下所示:
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0111 1111 1000 0000 0000
预期输出:
00000000000000000000000000000000
00000000000001111111100000000000
但是当我的代码输出这个时:
00000000000000000000001111111100
00000000000000000000000000000000
这是我的代码:
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp;
unsigned char buffer[4900] = "";
int y;
y = 0;
fp = fopen("tugasz.ksa", "rb");
for (int x = 0; x < 4900; x++) {
fread(buffer, 1, 4900, fp);
printf("%x", buffer[x]);
}
return (0);
}
【问题讨论】:
-
我建议你做一些rubber duck debugging。不,您不是在“逐字节”读取文件。
-
将
fread移到循环上方。设为y = fread(...),然后循环到y。 -
@Weather 它给了我更多不同的输出“1ddd3cc0”
-
@Weather 等我试试
-
您没有检查文件是否已成功打开。您没有检查来自
fread()的返回值。阅读时,您尝试一次读取 4900 个字节(而不是问题标题所暗示的逐字节读取)。您从“读取”的 4900 个值中的每个值中打印一个字节。使用getc()一次读取一个字节。或者使用fread(),但注意返回值(它表示读取了多少字节),然后循环读取读取的值。外部循环应该调用fread()并捕获并测试结果——size_t nbytes; while ((nbytes = fread(…)) > 0)。内部循环处理nbytes的数据。