例如,当
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);
这给我带来了正确的结果。然而,这里的问题是,当第二个( channel )值是这样的时,
50 00 00
它是基数 10,而不是 16,所以 0x505050 和 50 00 00 相加应该是 0x825050,但我得到 0x5050a0。
我该如何解决这个问题? 另外,当第二个输入不是十六进制且为负数时,例如,
-50 -40 -30
我得到0x505000,但它应该是0x1e2832
如何处理负数?
有人可以帮我解决这个问题吗?
最佳答案
您必须将输入收集为文本,然后通过您自己创建的逻辑来确定文本是否应解释为 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)
。请澄清你的数学?
关于在C中将十六进制转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624252/