如何将十进制数转换为十六进制数,然后将相应的结果存储为整数作为十进制值

时间:2011-11-04 09:57:58

标签: c

在C程序中,我将十进制数837存储为整数,其十六进制值为0x345。现在我想将该变量的相同十六进制值存储为整数变量345.怎么做?

6 个答案:

答案 0 :(得分:3)

是您的问题,将十进制数转换为十六进制格式,然后将该六进制数保存为整数。然后这将做到这一点

#include<stdio.h>
#include<stdlib.h>
int main()
 {
   char x[6];    'just took 6,you can increase its size as per your int number
                 ' Though it uses only 3 elements in these example
   int i;
   int a;
   i=837;              ' Load the i value with a decimal number say 837
   sprintf(x,"%x",i);  ' pass the hex format value to string x instead of stdout
                       ' x contains x[0] ='3' x[1] ='4' x[2] ='5'
   a=atoi(x);          ' Convert the string format to integer
   printf("%d",a);     ' outputs 345
 }

注意 Hexanumbers甚至可能包含ABC,为此,我不确切地知道你的逻辑是什么?忽略它或任何其他转变?如果六边形数是3ab,你会存储什么?

答案 1 :(得分:1)

我不确定你想要做什么,十六进制数字范围是0..F你不能以十进制数字(0..9)存储任意十六进制值。十六进制345是十进制的837。另一个有效的十六进制表示“ABC”无法按照您描述的方式进行转换。

要将值从十六进制转换为整数,您可以使用sscanf

格式字符串“%x”

sscanf ("345","%x" ,&i);

之后i将是837。

请注意,前面的“0x”已被省略。

答案 2 :(得分:1)

因此,在仔细阅读问题后,实施pmganswer,请考虑:

#include <stdio.h>

int main() {
  int i = 0x345;
  int j = 1;
  int result = 0;
  do { 
    result += (i&0xf)*j;
    j *= 10;
  } while (i/=(0x10));
  printf("%i\n", result);
}

这很有效,除非有十六位数(i&0xf) > 0x9

例如,在int i = 0xABC的情况下,十进制数字的范围显然不足以表示(如stacker指出的那样)数字s.t.这个十六进制值会产生1122之类的东西。在这种情况下,我不知道你期望函数产生什么。也许你应该扩展你的规范。

答案 3 :(得分:0)

int i = 0;
sscanf( yourhexstring , "%x", &i );

答案 4 :(得分:0)

隔离每个hexdigit;乘以10的正确功率并添加所有产品:

 0x345 ==> 5 * 1   =   5
 0x345 ==> 4 * 10  =  40
 0x345 ==> 3 * 100 = 300
                   + ---
                     345

答案 5 :(得分:0)

如果字符串始终具有前缀“0x”,则可以使用atoi(str+2)

atoi函数接受一个字符串参数,并尝试将其转换为十进制整数。通过在字符串中添加2,可以跳过字符串中的两个第一个字符。

请注意,十六进制数345与十进制数345不同.0x345是837十进制数,345十进制数是159十六进制数。