繁体   English   中英

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

[英]Convert hex scanned (scanf) from an unsigned int array into decimal

我在这里尝试将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之外,我什么都不知道。

您正在将指针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()成功是一个好主意。

您不需要为此的数组:

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

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

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

C。 getchar()什么意义?

不,您必须输入字符串作为字符点。 之后,您将转换为数字。 防爆

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM