如何将两个十六进制数合并为一个数,并将其转换为十进制?

5

我正在编写一个C程序,其中有两个十六进制数字,即num1=25num2=71。我想把它们合并为num3=2571,然后将2571转换为十进制数。我该怎么做?请帮忙,谢谢!


哪种编程语言?C ++,JS... - hich9n
抱歉,我忘了提到,我正在使用C语言。 - user46573544
2个回答

19

只需将数字移动并组合即可

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组合。逻辑或是组合的等效方式,因此使用|符号。

这个可以用 :) 但是没有必要加 &: num3= ((num1<<8)|(num2)); - Mariano Macchi
1
嗯,我已经做出了更改,谢谢 @MarianoMacchi - Nerdy
1
你需要将25(0025)和71(0071)放入一个变量中,因此你需要将第一个数字左移8位(0025变为2500),并与num2组合。逻辑或是组合的等效方式,因此使用|符号。 - Nerdy
太棒了! - Hridaynath

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接