从C中读取图像的十六进制值

Dav*_*ide -1 c hex readfile

我正在尝试使用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>包并包含正确的值(图像文件的大小,以字节为单位)

此图显示了我的程序输出的内容,以及它正在读取的文件的实际二进制内容:

在此输入图像描述 当你的序列后看到17,18,19也有十六进制值,但我的程序打印ffffffff多次.

usr*_*301 5

您以文本模式打开文件,而不是二进制文件.不同的平台可能表现不同.

在这种情况下,Microsoft Windows决定此纯文本文件在第一次出现Ctrl+Z(0x1A)时结束,之后返回EOF所有文本文件fgetc.

明确声明您要将文件作为二进制文件打开:

fp = fopen ("yourfile", "rb");
Run Code Online (Sandbox Code Playgroud)

而问题就消失了.