我正在尝试使用C从图像文件中读取十六进制值.在Linux中,此代码工作正常,但在Windows中它只读取前334个字节,我不明白为什么.
读取文件的代码是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
void readHexFile(char* path) {
FILE *fp;
if ((fp = fopen (path, "r")) != NULL) {
struct stat st;
stat(path, &st);
int i;
int ch;
for (i = 0; i < st.st_size; i++) {
ch = fgetc(fp);
printf("%x ", ch);
}
fclose(fp);
}
else {
return NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
st.st_size来自<sys/stat.h>包并包含正确的值(图像文件的大小,以字节为单位)
此图显示了我的程序输出的内容,以及它正在读取的文件的实际二进制内容:
您以文本模式打开文件,而不是二进制文件.不同的平台可能表现不同.
在这种情况下,Microsoft Windows决定此纯文本文件在第一次出现Ctrl+Z(0x1A)时结束,之后返回EOF所有文本文件fgetc.
明确声明您要将文件作为二进制文件打开:
fp = fopen ("yourfile", "rb");
Run Code Online (Sandbox Code Playgroud)
而问题就消失了.