0

我有一个 C 代码,在此期间我打开一个文件以输入一个十六进制数字。然后我想将获得的数字添加到另一个十六进制数字,最后以十六进制显示数字。例如,我输入 AC65E1 并添加 E 并显示 AC65EF。

有没有办法做到这一点,而无需通过转换为十进制并添加十进制然后转换回十六进制?如果没有,那么最佳的时间方法是什么?

编辑:我认为我的问题被误解了,我想知道我是否可以将 '+' 与 Hex 一起使用?如果我不能,那么我将不得不使用更改为十进制来使用“+”运算符。如有任何错误输入请见谅!

现在我正在将文件中的数据读入 char hex_num[10];

4

5 回答 5

3

实际上,计算机以二进制完成所有工作,因此除非您想付出大量无意义的努力来强制它对原始十六进制数字进行算术运算,否则您将需要解析数字,将它们相加并渲染结果再次以十六进制形式返回。

unsigned int value1, value2;
fscanf(fp, "%x %x", &value1, &value2)

unsigned int result = value1 + value2;
printf("%x\n", result);
于 2011-03-02T14:30:58.260 回答
2

C 和其他语言的数学不是在任何特定的基础上完成的——除非在最低级别的处理中,当然,它们是以二进制形式进行的。

我认为您的问题已被破坏,因为您想再次添加并E获得AC65E1..。AC65E1大概你的意思是AC65EF

我建议从文件中读取数据并将看起来像数字的字符串解析为整数,执行算术运算,然后以您希望的任何表示形式再次输出它们。

为此,使用strtol传递16作为base参数,或fscanf首先读入整数。

于 2011-03-02T14:32:55.390 回答
1

这是你想要的吗:http ://www.ehow.com/how_7529899_read-hex-file-ansi-c.html

于 2011-03-02T14:32:18.120 回答
1

你可以写一个逐个字符的加法器,就像你在纸上自然做的那样,即比较最后一个数字“1”+“E”=“F”,没有进位等。

但是,假设您的代码解析为十六进制数是有效的(这比十进制容易得多)并且假设您的数字小到足以放入一两个机器寄存器中,那么这可能不会更有效 - 如果您有1000+ 位十六进制字符串,那么逐个字符的方式可能是最简单的。

并且在任何情况下,这些都是从文件中读取的:IO 将比添加慢得多。所以我不会担心添加的最后一点性能。

于 2011-03-02T14:38:25.343 回答
0

你似乎有点困惑。

如果你这样做:

int a = 43, b = 12;

printf("%d+%d=%d\n", a, b, a + b);

计算机没有做任何“十进制加法”。加法以二进制形式完成,在编译时转换为十进制文本,在运行时转换为十进制文本,并在运行时打印输出。

您应该简单地使用strtol来解析数字,或sscanf(), 并添加。

手动编写基于文本的例程以“添加十六进制”无论如何都不会更好。

于 2011-03-02T14:31:46.810 回答