我正在尝试使用C从图像文件中读取十六进制值.在Linux中,此代码工作正常,但在Windows中它只读取前334个字节,我不明白为什么.
读取文件的代码是:
#include#include #include #include 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; } }
st.st_size
来自
包并包含正确的值(图像文件的大小,以字节为单位)
此图显示了我的程序输出的内容,以及它正在读取的文件的实际二进制内容:
当你的序列后看到17
,18
,19
也有十六进制值,但我的程序打印ffffffff
多次.
您以文本模式打开文件,而不是二进制文件.不同的平台可能表现不同.
在这种情况下,Microsoft Windows决定此纯文本文件在第一次出现Ctrl+Z
(0x1A
)时结束,之后返回EOF
所有文本文件fgetc
.
明确声明您要将文件作为二进制文件打开:
fp = fopen ("yourfile", "rb");
而问题就消失了.