我希望编写一个C程序,读取存储在文件中的1字节十六进制值。我已经浏览了互联网,包括StackOverflow,但我的要求似乎与平均值不同:
我有一个包含以下内容的文本文件 - 这是单字节十六进制值:
35 36 37 38
小数点是:
53, 54, 55, 56
十六进制值是以下ASCII字符
5 6 7 8
我想从包含ASCII 35 36 37 38
的文本文件中读取四个十六进制字节。我一直在修改FILE
指针和fread()
,但它会读取35
值,例如3
和5
,它存储在缓冲区中{ {1}}(分别为33 35
和3
的十六进制)。所以我的问题是......
简短版:
有没有办法一次读取两个ASCII字符文件(一次不是两个字节,因为这会产生不同的结果!)。也许我应该读一个字母?而不是呈现一些代码并声明它不会像通常在SO上那样工作,我不知道如何从这开始,所以我没有代码可以呈现。您不必为我编写代码,但有关如何处理问题场景的一些指导会很好。
答案 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();
}