嘿。我试图编写一个小程序,它将在最后一次出现“0xFF 0xC0 0x00 0x11”后读取后面的四个字节,这些字节可以很容易地转换为二进制或十进制。目的是在该十六进制模式的最后一次出现之后的2-5个字节表示JPEG文件的宽度和高度。在C中搜索二进制码(读取缓冲的二进制文件)
#include <stdio.h>
int main() {
FILE * pFile;
long lSize;
char * buffer;
size_t result;
pFile = fopen ("pano8sample.jpg" , "rb");
if(pFile==NULL){
fputs ("File error",stderr);
exit (1);
}
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
printf("\n\nFile is %d bytes big\n\n", lSize);
buffer = (char*) malloc (sizeof(char)*lSize);
if(buffer == NULL){
fputs("Memory error",stderr);
exit (2);
}
result = fread (buffer,1,lSize,pFile);
if(result != lSize){
fputs("Reading error",stderr);
exit (3);
}
//0xFF 0xC0 0x00 0x11 (0x08)
//Logic to check for hex/binary/dec
fclose (pFile);
free (buffer);
return 0;
}
的问题是我不知道如何从缓冲存储器递归阅读和使用最近读变量作为一个int比较对我的二进制/六角/十二月
我该怎么做?
'memmem()'函数未由POSIX标准化,但在Linux和AIX上可用,但在MacOS X(10.5)或Solaris 10上不可用。 – 2009-10-09 06:40:51
对于没有memmem实现的用户,我将其留作练习读者... – 2009-10-09 06:43:47
将memmem()似乎是可在OSX https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/memmem.3.html 我也可以用man memmem看到它 (OSX 10.11.6) – Chris 2016-11-16 21:45:26