首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言查找文件中特定十六進制特征碼的思路

     編輯:程式設計綜合問答

基本步驟

  1. `fopen(path, "rb")` 二進制只讀打開。
  2. 循環 `fread(buffer, 1, BUFSIZE, fp)` 讀取塊。
  3. 在緩衝區中查找目標字節序列 (如 `0x89 0x90 0x91`)。
  4. 找到則計算偏移:`ftell(fp) - bytes_read + index_in_buffer`。

簡易實現

#define BUFSIZE 4096
unsigned char target[] = {0x89, 0x90, 0x91};
unsigned char buf[BUFSIZE];
size_t read;
long offset = 0;
while ((read = fread(buf, 1, BUFSIZE, fp)) > 0) {
    for (size_t i = 0; i + sizeof(target) <= read; ++i) {
        if (memcmp(buf + i, target, sizeof(target)) == 0) {
            printf("Found at 0x%lX\n", offset + i);
            return offset + i;
        }
    }
    offset += read;
}

跨塊邊界處理

若特征碼橫跨兩次 `fread`,上述會漏檢。解決:保留上一塊尾部 `sizeof(target)-1` 字節拼接到下一塊頭部再查找。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved