在C中读取hex文件

时间:2012-03-19 20:05:35

标签: c file hex fgets scanf

我正在尝试从文本文件中读取十六进制值。

每条长度可以有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非常麻烦。

有人可以帮我这个吗?我将这个问题困在将近两周。

1 个答案:

答案 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;
    }
}

以上没有错误检查(非十六进制数字,行上的奇数位数等)。但这是一般的想法。