Прочитайте шестнадцатеричный файл в C - PullRequest
1 голос
/ 20 марта 2012

Я пытаюсь прочитать шестнадцатеричные значения из текстового файла.

Может быть 20000 строк различной длины.

0F61048C

1F1ED7F855A106CB20D574C24833

52D3C74F4101FC1143C6DE298933

CF8630C79991046 * 587 * 101 * E3 * E1BBB * E3BB * E3BB * E3BB * E3BB * E * E3BB * E * E3BB * E3BB * E * E3BB * E * E * E * E * E * E * E * E * E * E * E * E * E * BF * E * E * Eв ASCII при сохранении в памяти.Я думаю об использовании fscanf, так как есть спецификатор формата% x.Но как я могу прочитать всю строку, используя fscanf?Я знаю, что это не лучший подход для чтения строки.Возможно, это fgets, но fgets конвертирует в ASCII, я не хочу этим пользоваться.В fgets, если есть шестнадцатеричная строка, например, 01 04 05 FF, она сохраняется в памяти как 3031 3034 3035 4646. Преобразовать этот формат обратно в 01 04 05 FF действительно сложно.

Кто-нибудь может мне помочь с этим?Я застрял с этой проблемой почти 2 недели.

1 Ответ

2 голосов
/ 20 марта 2012

Вы, безусловно, можете сделать это, используя fgets(), и это, вероятно, намного проще, чем использовать fscanf() для линий переменной длины. Например:

char buf[200];
while (fgets(buf, sizeof(buf), infile) != NULL) {
    unsigned char a[200];
    int i = 0;
    while (buf[i] != '\n') {
        int b; // must use int with sscanf()
        sscanf(&buf[i], "%2x", &b);
        a[i] = b;
        i += 2;
    }
}

Выше нет проверки ошибок (не шестнадцатеричные цифры, нечетное количество цифр в строке и т. Д.). Но это общая идея.

...