在C中操作十六进制

时间:2011-03-02 14:26:54

标签: c optimization hex addition

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

有没有办法在不通过转换为十进制并添加十进制然后转换回十六进制的情况下执行此操作?如果没有什么是时间最佳的方式呢?

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

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

5 个答案:

答案 0 :(得分:3)

实际上,计算机以二进制方式完成所有工作,所以除非你想进行大量毫无意义的努力迫使它对原始十六进制数字进行算术运算,否则你需要解析数字,添加它们,并将结果再次作为十六进制呈现。

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

unsigned int result = value1 + value2;
printf("%x\n", result);

答案 1 :(得分:2)

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

我认为您的问题已被删除,因为您要将E添加到AC65E1并再次获取.. AC65E1。大概你的意思是AC65EF

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

为此,请strtol使用16作为base参数,或fscanf首先读取整数。

答案 2 :(得分:1)

答案 3 :(得分:1)

你可以写一个逐个字符的加法器,就像你在纸上自然地这样做,即比较最后的数字'1'+'E'='F',没有携带等等。

但是,假设您的代码以十六进制数进行解析是有效的(比十进制更容易做到)并假设您的数字足够小以适应机器寄存器或两个 - 这可能不会显着提高效率 - 如果你有超过1000个数字的十六进制字符串,那么逐个字符的方式可能是最简单的。

无论如何,这些都是从文件中读取的:IO将比添加慢得多。所以我不会担心添加的最后一点性能。

答案 4 :(得分:0)

你似乎有点困惑。

如果你这样做:

int a = 43, b = 12;

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

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

您只需使用strtol来解析数字,或sscanf(),然后添加。

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