在C程序中,我将十进制数837存储为整数,其十六进制值为0x345。现在我想将该变量的相同十六进制值存储为整数变量345.怎么做?
答案 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)
#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十六进制数。