从C中的文件中读取64位十六进制值

时间:2012-02-12 01:10:02

标签: c file-io

我有一个看起来像这样的文本文件:

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 个答案:

答案 0 :(得分:3)

只需使用inttypes.h中的宏和typedef:

uint64_t key,plaintext;
fscanf(infile,"%u" PRIx64 " %u" PRIx64,&key, &plaintext);

答案 1 :(得分:2)

在C99,C11和C ++ 11中,您可以使用strtoull,例如标题为strtoull(s, NULL, 16);的{​​{1}}。