gpt4 book ai didi

c - 在 C 中搜索二进制模式(读取缓冲的二进制文件)

转载 作者:行者123 更新时间:2023-12-04 09:26:45 25 4
gpt4 key购买 nike

你好。我正在尝试编写一个小程序,它将在最后一次出现“0xFF 0xC0 0x00 0x11”之后读取后面的四个字节,它可以很容易地转换为二进制或十进制。目的是最后一次出现该十六进制模式后的 2-5 个字节表示 JPEG 文件的宽度和高度。

#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 来与我的二进制/十六进制/十进制进行比较。

我该怎么做?

最佳答案

byte needle[4] = {0xff, 0xc0, 0x00, 0x11};
byte *last_needle = NULL;
while (true) {
byte *p = memmem(buffer, lSize, needle, 4);
if (!p) break;
last_needle = p;
lSize -= (p + 4) - buffer;
buffer = p + 4;
}

如果last_needle不为null,可以打印出last_needle+4...

关于c - 在 C 中搜索二进制模式(读取缓冲的二进制文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com