안녕하세요. 나는 "0xFF 0xC0 0x00 0x11"의 마지막 발생 이후 네 바이트 또는 십진수로 쉽게 변환 할 수있는 4 바이트를 읽는 작은 프로그램을 작성하려고합니다. 그 목적은 그 16 진수 패턴의 마지막 발생 다음 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;
}
문제는 내가 재귀 적으로 버퍼 메모리에서 읽어 내 바이너리/진수/DEC에 대해 비교하는 int로 가장 최근에 읽은 변수를 사용하는 방법을 모르는 것입니다.
어떻게하면됩니까?
'memmem()'함수는 POSIX에 의해 표준화되지 않았지만 리눅스와 AIX에서 사용 가능하지만 MacOS X (10.5) 나 Solaris 10에서는 사용 가능하지 않습니다. –
memmem 구현이없는 사람들을 위해 독자 ... –
memmem()이 OSX에서 사용 가능한 것으로 보입니다 https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/memmem.3.html I 남자 memmem을 사용하여 그것을 또한보십시오 (OSX 10.11.6) – Chris