我有一个看起来像这样的文本文件:
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)
答案 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}}。