如何在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”,它会起作用吗?我会得到正确的数据吗?
答案 0 :(得分:9)
当您打开非文本文件时,您需要指定二进制(未翻译)模式:
FILE *fp = fopen("example.png", "rb");
在典型情况下,您通过定义镜像文件中结构的结构,然后使用fread
从文件读取到结构中来完成大部分二进制文件读取(但必须是仔细完成,以确保结构中的填充之类的内容在内存中和磁盘上的表示没有区别。)
答案 1 :(得分:2)
您需要以二进制模式打开文件。这允许您以“原始”模式读取字节,它们与文件中的字节保持不变。
但是,确定特定像素的颜色等要求您完全理解文件中字节的含义以及如何为正在读取的文件排列它们。第二个要求要困难得多。为了做到这一点,你需要对该文件类型的格式进行一些研究。
答案 2 :(得分:1)
是的,您可以在c中的binary mode
中打开任何文件。如果您有兴趣,那么您还可以阅读任何此类非文本文件的第一个字节。
在大多数情况下,所有不同的文件格式都有一些固定的标题,因此根据您可以识别该文件的类型。
打开任何matroska(.mkv)文件并读取前4个字节,您将始终拥有此
0x1A 0x45 0xDF 0xA3
您还可以在linux中看到二进制表示hexdump
实用程序中的任何文件
==================== 修改强>
such as .jpg/.png/.bmp and see the value at certain index,to
check what colour it is?
在这里你需要了解该文件的格式,并根据你可以知道哪个地方的数据指示了什么信息.. !!!