我是 C 的新手,想问一下我已经纠结了一段时间的以下问题。 :( 请帮忙!
我想读取一个明文文件 passout.txt,其中包含一串十六进制的字符串,例如:
A1B2C3D4E5403E9D501B223AD45523D6
并将它们放入一个数组中:
{A1, B2, C3, D4, E5, 40, 3E, 9D, 50, 1B, 22, 3A, D4, 55, 23, D6}
但是,我目前的输出只有:
{D4, 55, 23, D6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
只能取回最后四位十六进制!我真的不知道我犯了什么错误,我在网上找不到任何相关的解决方案!因此,有人愿意帮忙吗?
这是我的代码!
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
#define AES_BLOCK_SIZE 16
void main()
{
FILE *ifp;
int i, rv;
unsigned char in[AES_BLOCK_SIZE] = {0};
ifp = fopen("passout.txt", "r");
// loop and read the input file
for(i = 0; i < AES_BLOCK_SIZE; i++)
{
rv = fscanf(ifp, "%X", &in[i]);
if(rv != 1)
i = AES_BLOCK_SIZE;
}
printf("Print result: \n");
for(i=0; i < AES_BLOCK_SIZE; i++)
printf("%X ",*(in+i));
printf("\n");
fclose(ifp);
}
最佳答案
rv = fscanf(ifp, "%X", &in[i]);
改为
rv = fscanf(ifp, "%2hhX", &in[i]);
C99之前
unsigned X;
rv = fscanf(ifp, "%2X", &X);
if(rv != 1)
break;
in[i] = (unsigned char)X;
关于c - 从文本文件中读取十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328235/