在C中将十六进制转换为十进制

时间:2018-04-03 07:11:52

标签: c hex

例如,

val = 0x505050
val1 = 0x005000

结果应该是两个十六进制的添加,即:

0x50a050

我做的是:

int hex;
int channel;
int result;

printf("first hex number: ");
scanf("%x", &hex);

printf("second hex number: ");
scanf("%x", &channel);

result = hex + channel;
printf("Your new hex value is: ");
printf("0x%x\n", result);

这给我带来了正确的结果。但是,这里的问题是,当第二个(通道)值类似时,

50 00 00

它是基数10,而不是16,所以0x505050和50 00 00的加法应该是0x825050,但我得到0x5050a0。

我该如何处理这个问题? 此外,当第二个输入不是十六进制且它是负数时,例如,

-50 -40 -30

我得到0x505000,但它应该是0x1e2832

如何处理负数?

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您必须以文本形式收集输入,然后浏览自己的创建逻辑,以确定文本是否应解释为base16,base10或其他内容:

char input[1024];
fgets(input, 1024, stdin);
// Examine input to figure out if base16, or base10.

<小时/> 您还写道500000(base10) + 0x505050(base16)应为0x825050(base16)。但是当我把它们加在一起时,我得到了0x57F170(base16) 请澄清你的数学?