如何将两个十六进制数合并为一个数字,然后将其转换为十进制数。

时间:2015-03-25 09:48:43

标签: c merge numbers hex decimal

我正在制作一个C程序,其中我有两个十六进制数,即num1=25 num2=71,它们是十六进制的。我想将其设为num3=2571,然后我必须将2571转换为十进制数。我该怎么做呢?请帮忙,谢谢!

2 个答案:

答案 0 :(得分:10)

只需移动数字并组合

int num1,num2,num3;
num1=0x25;
num2=0x71;
num3=(num1<<8)|(num2);
printf("%x %d",num3,num3);

你需要在变量中放置25(0025)后跟71(0071),所以你必须将第一个数字左移8位(0025到2500)并组合num2。逻辑或相当于组合,因此|符号。

答案 1 :(得分:0)

数字不会存储为“十进制”或“十六进制”,这就是它们为人类所写的方式。分配十六进制num1 = 0x25或十进制num1 = 37等值不会产生任何影响:num1将保持相同的值。

num3 = 256 * num1 + num2;

如果两个十六进制数为257,那么您的问题并未说明您希望发生什么。答案是2507还是257?如果是后者,

num3 = 16 * num1 + num2;

在任何一种情况下,我的第一段的推论都适用:在打印之前,数字不是“十进制”或“十六进制”。

printf ("Decimal %d", num3);
printf ("Hexadecimal %x", num3);

如果两个数字是字符串,则问题更有意义 - 以人类可读的格式!

#include<stdio.h>
#include<string.h>

int main()
{
    char num1[] = "25";
    char num2[] = "71";
    char num[20];
    int num3;
    strcpy (num, num1);
    strcat (num, num2);
    printf ("Hexadecimal string %s\n", num);
    sscanf(num,"%x", &num3);
    printf ("Decimal number %d\n", num3);
    return 0;
}

节目输出:

Hexadecimal string 2571
Decimal number 9585