我正在尝试从文本文件中读取十六进制值。
每条长度可以有20000条线。
0F61048C
1F1ED7F855A106CB20D574C24833
52D3C74F4101FC1143C6DE298933
CF8630C79991046C587474E4B858
6EF8745D6000ACDB3757ECEB79EB
我不能使用fgets,因为它在存储在内存中时将每个值转换为ASCII。我正在考虑使用fscanf,因为格式说明符%x。但是我如何使用fscanf读取整行?我知道这不是读取线条的最佳方法。也许它是fgets,但fgets转换为ASCII,我不想使用它。 在fgets中如果有十六行,如01 04 05 FF,它在内存中存储为3031 3034 3035 4646.将此格式转换回01 04 05 FF非常麻烦。
有人可以帮我这个吗?我将这个问题困在将近两周。
答案 0 :(得分:2)
您当然可以使用fgets()
执行此操作,并且可能比使用fscanf()
更容易变长线更容易。例如:
char buf[200];
while (fgets(buf, sizeof(buf), infile) != NULL) {
unsigned char a[200];
int i = 0;
while (buf[i] != '\n') {
int b; // must use int with sscanf()
sscanf(&buf[i], "%2x", &b);
a[i] = b;
i += 2;
}
}
以上没有错误检查(非十六进制数字,行上的奇数位数等)。但这是一般的想法。