1

我在这里尝试将 4 位数的 hexa 转换为 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

4 回答 4

7

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

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()另请注意,通过检查返回值来检查是否成功是一个好主意。

于 2012-01-27T13:23:32.920 回答
2

你不需要一个数组:

unsigned int val;
printf("Type in 4-digit hexa: \n");
scanf("%x", &val);
printf("Your number in dec is %u \n", val);
于 2012-01-27T13:24:32.230 回答
1

一种。打印array[0],不是array

(可选) b. 扫描到array,不扫描到&array

C。有什么意义getchar()

于 2012-01-27T13:25:06.763 回答
-3

不,您必须作为字符串输入到一个字符点。之后,您转换为数字。前任

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);
于 2012-01-27T13:30:26.107 回答