Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在读取文件的内容,而不是";。txt";文件_C++_C_File Handling - Fatal编程技术网

C++ 正在读取文件的内容,而不是";。txt";文件

C++ 正在读取文件的内容,而不是";。txt";文件,c++,c,file-handling,C++,C,File Handling,如何读取在c/c++中不是简单文本文件的文件的内容?例如,我想读取图像文件,如.jpg/.png/.bmp,并查看特定索引处的值,以检查它是什么颜色?或者如果我有一个.exe/.rar/.zip文件,想知道不同索引中存储了什么值? 我知道c风格的读取文件,这是 FILE *fp; fp = fopen("example.txt","r"); /* open for reading */ char c; c = getc(fp) ; 我想知道如果我用“image.png”来替换“examp

如何读取在c/c++中不是简单文本文件的文件的内容?例如,我想读取图像文件,如.jpg/.png/.bmp,并查看特定索引处的值,以检查它是什么颜色?或者如果我有一个.exe/.rar/.zip文件,想知道不同索引中存储了什么值? 我知道c风格的读取文件,这是

FILE *fp;

fp = fopen("example.txt","r"); /* open for reading */

char c;

c = getc(fp) ;

我想知道如果我用“image.png”来替换“example.txt”,它会工作吗?我能得到正确的数据吗?

您需要以二进制模式打开文件。这允许您在“原始”模式下读取字节,其中字节与文件中的字节保持不变


但是,确定特定像素的颜色等要求您完全理解文件中字节的含义,以及它们在读取文件时的排列方式。第二个要求要困难得多。为此,您需要对该文件类型的格式进行一些研究。

打开非文本文件时,您需要指定二进制(未翻译)模式:


在典型的情况下,大多数二进制文件的读取都是通过定义镜像文件中结构的结构来完成的,然后使用
fread
将文件读取到结构中(但这必须小心完成,以确保结构中的填充等内容在内存和磁盘中的表示形式之间没有差异)是的,您可以在c语言中以二进制模式打开任何文件。如果您感兴趣,那么您也可以读取任何此类非文本文件的一些第一字节

在大多数情况下,所有不同的文件格式都有一些固定的头,因此您可以根据这些头来识别该文件的类型

打开任何matroska(.mkv)文件并读取前4个字节,您将始终拥有此文件

0x1A   0x45   0xDF   0xA3
您还可以在linux中看到二进制表示形式的任何文件
hextump
实用程序

==================== 编辑:

such as .jpg/.png/.bmp and see the value at certain index,to 
check what colour it is?

在这里,您需要了解该文件的格式,并在此基础上,您可以知道在哪个位置的数据上显示了哪些信息

读取任何类型的文件也不例外。只有解释你读到的是不同的。我已经知道.bmp是未压缩的文件,所以像素颜色数据是按顺序排列的。这是真的吗?@someone\u smiley当.bmp未压缩时,它仍然有一个格式。维基百科有一些关于这个问题的文章。谢谢你启发我:)谢谢你的回答:)。所以打开所有其他扩展都需要“rb”模式,我必须小心数据格式,对吗?如果您能详细说明“定义镜像文件中结构的结构”,我将不胜感激。我不理解“镜像结构”这个术语
such as .jpg/.png/.bmp and see the value at certain index,to 
check what colour it is?