C:读取以ASCII编写的十六进制

时间:2014-09-04 21:12:42

标签: c file-io hex

我希望编写一个C程序,读取存储在文件中的1字节十六进制值。我已经浏览了互联网,包括StackOverflow,但我的要求似乎与平均值不同:

我有一个包含以下内容的文本文件 - 这是单字节十六进制值:

35 36 37 38

小数点是:

53, 54, 55, 56

十六进制值是以下ASCII字符

5 6 7 8

我想从包含ASCII 35 36 37 38的文本文件中读取四个十六进制字节。我一直在修改FILE指针和fread(),但它会读取35值,例如35,它存储在缓冲区中{ {1}}(分别为33 353的十六进制)。所以我的问题是......

简短版

有没有办法一次读取两个ASCII字符文件(一次不是两个字节,因为这会产生不同的结果!)。也许我应该读一个字母?而不是呈现一些代码并声明它不会像通常在SO上那样工作,我不知道如何从这开始,所以我没有代码可以呈现。您不必为我编写代码,但有关如何处理问题场景的一些指导会很好。

1 个答案:

答案 0 :(得分:2)

确实可以一次读取两个字符:

unsigned int dehex(FILE * p)
{
    char two[2];
    if (2 != fread(two, 1, 2, p)) { abort(); }

    return as_hex(two[0]) * 16 + as_hex(two[1]);
}

unsigned int as_hex(char c)
{
    if ('0' <= c && c <= '9') { return c - '0'; }
    if ('a' <= c && c <= 'f') { return c + 10 - 'a'; }
    if ('A' <= c && c <= 'F') { return c + 10 - 'A'; }
    abort();
}