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

标签 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);

这给我带来了正确的结果。然而,这里的问题是,当第二个( 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/

相关文章:

c - 发送原始 http header

c - unsigned char 在 C 嵌入式系统中的用处

c - 为什么字符串中出现段错误而不是字符?

java - 来自十六进制数的 NumberFormatException

sql - varchar()中的十六进制字符实际上是ascii。需要解码

python - 在Python中将转义的十六进制字符串转换为十六进制数字

ios - 是否有将数字转换为十六进制字符串的快速 native 函数?

c - C select() 函数是否已弃用?

c - 如何通过指向字符串数组来保存输入?

c++ - 如何在 C++ 中将字符串转换为 HexBytes 数组?