Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2013, 15:32   #11
Alexey_68
Пользователь
 
Регистрация: 01.03.2013
Сообщений: 39
По умолчанию

у Nuklonа код рабочий, но какой вывод в файл мне надо использовать? (переход на новую строку)
Если без переноса, то получится 1 длинная строка
Alexey_68 вне форума Ответить с цитированием
Старый 11.06.2013, 15:59   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от Alexey_68 Посмотреть сообщение
какой вывод в файл мне надо использовать?
Все числа через пробел без переноса в одну большую строку.

Вот мой вариант для файла вида:
Цитата:
00000000: 00 60 BE 00 40 44 00 8D BE 00 D0 FB FF C7 87 9C
00000010: 20 05 00 E6 0E 08 76 57 83 CD FF EB 0E 90 90 90
00000020: 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC
00000030: 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83
Код:
#include <stdlib.h>
#include <stdio.h>

int
main()
{
    FILE* fp;
    fp = fopen("hex.txt", "r");
    if(!fp)
        return 1;
    //int search[] = {-1, -1, -1, -1, -1, 0x66, 0x9C, 0x60, 0x50, 0x8D, 0x88, -1, 0xF0 ,-1, -1, 0x8D, 0x90};
    int search[] = {-1, -1, -1, 0x8A, 0x06, 0x46, 0x88, 0x07};
    //int search[] = {0x11, 0xDB};
    int len = sizeof(search) / sizeof(search[0]);
    int buf[len];
    int i;
    int fl = 0;
    for (i = 0; i < len && fl != EOF; ++i) {
        if (fl != EOF && !(i % 16))
            fl = fscanf(fp, "%*x%*c");
        if (fl != EOF)
            fl = fscanf(fp, "%x", &buf[i]);
    }
    int p = 0;
    int pos = -1;
    int t;
    do {
        ++pos;
        t = 1;
        for (i = 0; i < len && (t = (buf[(i + p) % len] == search[i] || search[i] == -1)); ++i);
        if (fl != EOF && !((pos + len) % 16))
            fl = fscanf(fp, "%*x%*c");
        if (fl != EOF)
            fl = fscanf(fp, "%x", &buf[p++]);
        p %= len;

    } while (fl != EOF && t == 0);
    if (t)
        printf("Found: d%d 0x%X\n", pos, pos);
    else
        printf("Not found\n");
    fclose(fp);
    getchar();
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.06.2013, 22:16   #13
Alexey_68
Пользователь
 
Регистрация: 01.03.2013
Сообщений: 39
По умолчанию

Спасибо BDA, компилятор ругается, у меня CodeGear C++ Builder 2007,
проект C
Alexey_68 вне форума Ответить с цитированием
Старый 11.06.2013, 23:12   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Пожалуйста. Я писал в Code::Blocks.
Код:
#include <stdio.h>
#pragma hdrstop
#include <tchar.h>
#pragma argsused

int _tmain(int argc, _TCHAR* argv[]) {
    FILE *fp = fopen("hex.txt", "r");
    int search[] = {
        -1, -1, -1, 0x8A, 0x06, 0x46, 0x88, 0x07
    };
    int len = sizeof(search) / sizeof(search[0]);
    int *buf = calloc(len, sizeof(buf[0]));
    int i, fl = 0, p = 0, pos = -1, t;
    if (fp == NULL) {
        printf("The file was not opened\n");
        getchar();
        return 1;
    }
    for (i = 0; i < len && fl != EOF; ++i) {
        if (fl != EOF && !(i % 16))
            fl = fscanf(fp, "%*x%*c");
        if (fl != EOF)
            fl = fscanf(fp, "%x", &buf[i]);
    }
    do {
        ++pos;
        t = 1;
        for (i = 0;
            (i < len) &&
            (t = (buf[(i + p) % len] == search[i] || search[i] == -1)); ++i);
        if (fl != EOF && !((pos + len) % 16))
            fl = fscanf(fp, "%*x%*c");
        if (fl != EOF)
            fl = fscanf(fp, "%x", &buf[p++]);
        p %= len;
    }
    while (fl != EOF && t == 0);
    if (t)
        printf("Found: d%d 0x%X\n", pos, pos);
    else
        printf("Not found\n");
    fclose(fp);
    free(buf);
    getchar();
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.06.2013, 00:33   #15
Alexey_68
Пользователь
 
Регистрация: 01.03.2013
Сообщений: 39
По умолчанию

Большое спасибо BDA и Nuklon за помощь в решении вопроса.
Прощу прощения за изначально некорректно поставленную задачу.
С Уважением Алексей.
Alexey_68 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по маске Delphi Ztman Помощь студентам 2 28.10.2012 19:59
Поиск текста по маске WinApi Помощь студентам 6 27.12.2009 01:17
Поиск папки по маске ForzaJuve Общие вопросы Delphi 9 20.06.2009 23:50
Поиск По маске CoreFox Общие вопросы Delphi 11 21.02.2008 21:48