gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:14:38 25 4
gpt4 key购买 nike

我希望编写一个 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其存储在缓冲区中为 33 35 (分别为 35 的十六进制)。所以我的问题是...

简短版本:

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

最佳答案

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

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();
}

关于C:读取以 ASCII 编写的十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com