当前位置:  开发笔记 > 运维 > 正文

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

如何解决《从C中读取图像的十六进制值》经验,为你挑选了1个好方法。

我正在尝试使用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多次.



1> usr2564301..:

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

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

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

fp = fopen ("yourfile", "rb");

而问题就消失了.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有