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

Aut*_* K. 0 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

unw*_*ind 6

您传递一个指针,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);
Run Code Online (Sandbox Code Playgroud)

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