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

标签 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)

最佳答案

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

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

关于c - 从 C 文件中读取 64 位十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245563/

相关文章:

c - -fomit-frame-pointer *总是*省略 fp 吗?

c - 没有初始化的for循环中的for循环

c - 我的树程序在插入一个根节点后崩溃

c - 检测写入数据的偏移量

c++ - 从另一个文件读取时写入文件

c++ - udp 服务器向特定客户端发送数据,直到收到任何 recvfrom

java - 如何保存具有自定义扩展名的文件?

c++ - C++ 中是否有创建 .bin 文件的函数,或者此代码是否缺少某些内容?

java - 将文件写入 sdcard

c - C 中细粒度的线程安全链表