【问题标题】:How to merge two Hex numbers to one number and then convert it into decimal.?如何将两个十六进制数字合并为一个数字,然后将其转换为十进制。?
【发布时间】:2015-03-25 09:48:43
【问题描述】:

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

【问题讨论】:

  • 哪种语言? c++,js,...
  • 对不起,我忘了说,我用的是C

标签: c merge numbers hex decimal


【解决方案1】:

只需移动数字并组合

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
  • ya.. 我已经做出改变谢谢@MarianoMacchi
  • 您需要将 25 (0025) 后跟 71 (0071) 放在一个变量中,因此您必须将第一个数字左移 8 位(0025 到 2500)并结合 num2 .Logical or is组合的等价物,因此是| 符号。
  • 太棒了!回答
【解决方案2】:

数字不存储为“十进制”或“十六进制”,这就是它们的书写方式以供人类查看。分配一个值,如十六进制 num1 = 0x25 或十进制 num1 = 37 没有区别:num1 将保持相同的值。

num3 = 256 * num1 + num2;

你的问题没有说明如果两个十六进制的humbers 是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多