Считать 64-битное значение Hex из файла в C - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть текстовый файл, который выглядит следующим образом:

0000000000000000    0000000000000000
FFFFFFFFFFFFFFFF    FFFFFFFFFFFFFFFF
3000000000000000    1000000000000001
1111111111111111    1111111111111111
0123456789ABCDEF    1111111111111111
1111111111111111    0123456789ABCDEF
0808080808080808    0000000000000000
FEDCBA9876543210    0123456789ABCDEF
7CA110454A1A6E57    01A1D6D039776742
0131D9619DC1376E    5CD54CA83DEF57DA

Как лучше всего читать их при использовании C?Моя первая попытка использовать fscanf() для чтения их в int переменных, но это 64-битные шестнадцатеричные значения, поэтому тип int слишком мал, чтобы прочитать их полностью, а часть значений была усечена.

Моя попытка:

while( fscanf(infile, "%x %x", &key, &plaintext) != EOF )
{
    printf("%x\t\t%x\n", key, plaintext);

}

Достаточно ли большой тип, чтобы держать его в C?Если нет, каковы мои другие варианты хранения?Символьные массивы?

Спасибо

Обратите внимание, что я использую ANSI C с GCC 4.5.2 (MinGW)

Ответы [ 2 ]

3 голосов
/ 12 февраля 2012

Просто используйте макрос и typedef из inttypes.h:

uint64_t key,plaintext;
fscanf(infile,"%u" PRIx64 " %u" PRIx64,&key, &plaintext);
2 голосов
/ 12 февраля 2012

В C99, C11 и C ++ 11 вы можете использовать strtoull, например, strtoull(s, NULL, 16);, из заголовка <stdlib.h>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...