将十六进制扫描(scanf)从unsigned int数组转换为十进制数

时间:2012-01-27 13:21:11

标签: c hex unsigned-integer

我正在尝试将4位六进制转换为dec但未成功。 这是我的代码。

unsigned int array[4];                         

printf("Type in 4-digit hexa: \n");

scanf("%x", &array);

while(getchar() != '\n');

printf("Your number in dec is %u \n", array);

我不知道它有什么问题,但它不会给出正确的dec输出。 就像我放入EEFF一样,它应该给出61183,但程序仍然打印出65518.

这个号码来自哪里?我的代码出了什么问题?根据我的考虑,我使用unsigned int,FFFF等于65385,unsigned int的范围是0到65535.数据范围应该没有问题,我也使用了%u。

在我完成一些搜索之后,我现在唯一可以想到的是这个问题可能与unsigned int的大小有关,也可能与int或sth有关。 我读了解释但不太明白。

我知道,这可能是重复,但我在这里要求更简单的解释 为什么这不起作用。说实话,我对这个网站和编程都是一个绝对新手,所以请用编码方便我。仅供参考,除了stdio.h之外我什么都不知道。

4 个答案:

答案 0 :(得分:6)

您正在将指针array传递给printf()。这里不需要数组,您尝试扫描和打印的是一个数字。

unsigned int number;

printf("Type in 4-digit hex:\n");

if (scanf("%x", &number) == 1)
  printf("Your number in dec is %u \n", number);

另请注意,通过检查返回值来检查scanf()是否成功被认为是个好主意。

答案 1 :(得分:2)

你不需要一个阵列:

unsigned int val;
printf("Type in 4-digit hexa: \n");
scanf("%x", &val);
printf("Your number in dec is %u \n", val);

答案 2 :(得分:1)

一个。打印array[0],而不是array

(可选)b。扫描到array,而不是&array

℃。 getchar()是什么意思?

答案 3 :(得分:-2)

不,您必须以字符串形式输入字符。之后,您将转换为数字。 实施例

char *str=char[10];
int i=0,num=0;
printf("Type in 4-digit hexa: ");
scanf("%s",str);

for(i=0;str[i]!='\0';i++)
   if(str[i]>='0' && str[i]<='9') num=16*num+str[i]-'0';
   else if(str[i]>='a' && str[i]<='f') num=16*num+str[i]-'a';
   else if(str[i]>='A' && str[i]<='F') num=16*num+str[i]-'A';

printf("Dec is %d",num);