Pregunta

Estoy aquí tratando de convertir el HEXA de 4 dígitos en DEC, pero no tiene éxito. Aquí está mi código.

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

No sé qué le pasa a eso, pero simplemente no daría la salida correcta de DEC. Como cuando puse en EEFF, se supone que debe emitir 61183, pero el programa se mantuvo en impresión 65518.

¿De dónde es este número? ¿Qué pasa con mi código? Utilicé INT sin firmar según mi consideración que FFFF es igual a 65385 y el rango para INT insinenciado es 0 a 65535. No debe haber ningún problema con el rango de datos y también utilicé% U con él.

Lo único que puedo pensar en este momento después de haber hecho cierta búsqueda es que este problema podría tener algo que hacer con el tamaño de INT sin firmar a int o sth. Leí la explicación pero no entendí muy bien.

Sé que esto podría ser una duplicación, pero estoy aquí pidiendo una explicación más fácil de por qué esto no funciona. Para ser honesto, soy absolutamente novedoso tanto para este sitio como para la programación, así que por favor, vaya fácilmente con la codificación. FYI, realmente no sé nada fuera de STDIO.H.

¿Fue útil?

Solución

You are passing a pointer, array, to printf(). There is no need for an array here, what you're trying to scan and print is a single number.

unsigned int number;

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

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

Also note that it's considered a good idea to check if scanf() succeeds or not, by inspecting the return value.

Otros consejos

You don't need an array for that:

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

a. print array[0], not array.

(optional) b. scan to array, not to &array.

c. what is the point of the getchar()?

No, you must input as string to a point of characters. After that, you convert to number. Ex

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top