#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// open image
FILE *image = fopen("me.jpg", "r");
// read image
// check if file is NULL
if(image == NULL)
{
return 1;
}
// store char signature in array
unsigned char signature[4];
// store extra
unsigned char extra[16] =
{
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef
};
// read signature
fread(signature, 4, 1, image);
// read extra
char extrahex = fread(extra, 16, 1, image);
// find extra in the image
for (int i = 0; i < 16; i++)
{
if(extra[i] == extrahex)
{
printf("%#04x\n", extrahex);
return 0;
char hexnum = extrahex;
// condition for jpeg
if(signature[0] == 0xff && signature[1] == 0xd8 && signature[2] == 0xff && signature[3] == hexnum)
{
printf("valid jpeg format\n");
}
else
{
printf("not a valid jpeg format\n");
}
return 0;
}
}
fclose(image);
}
字符串
打印的返回值为:0x01,这不是我正在检查图像的额外数组中的值。当然,结果是“不是有效的jpg格式”。我尝试了一个不同的图像,它打印相同的0x01值。
的数据
3条答案
按热度按时间n3h0vuf21#
您不需要再调用
fread
。相反,您必须检查signature[3]
是否是存储在extra
中的已知值之一。字符串
或者,检查
signature[3]
的前四位是否为1110
(0xe
)。型
hrysbysz2#
如本文所述:https://en.cppreference.com/w/c/io/freadfread的返回值是函数读取的完整项目数。在本例中,您尝试读取1个大小为16字节的元素。所以extrahex将永远是0x01。
只是猜测:您可能需要**char extrahex = signature[3]**代替
oprakyz73#
以Oka为例解决。不过有趣的是,我使用了地址和指针,在printf.
中返回值仍然是1