Конвертируйте Hex Scanced (Scanf) из лишенного массива INT INT в десятичные

StackOverflow https://stackoverflow.com/questions/9033840

  •  14-11-2019
  •  | 
  •  

Вопрос

Я здесь пытаюсь конвертировать 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. Как будто я поставил в Эфф, он должен выдавать 61183, но программа продолжала распечатывать 65518.

Где это число от? Что не так с моим кодом? Я использовал unsigned int в соответствии с моим соображением, что FFFF равен 65385, и диапазон для unsigned int составляет от 0 до 65535. Не должно быть проблем с диапазоном данных, и я также использовал% U с ним.

Единственное, о чем я могу подумать прямо сейчас после того, как я сделал некоторые поиски, заключается в том, что эта проблема может иметь значение, чтобы сделать с размером unsigned int int или ith. Я прочитал объяснение, но не совсем понял.

Я знаю, это может быть дублирование, но я здесь прошу проще объяснения почему это не работает. Если честно, я абсолютно Newby для этого сайта, так и для программирования, поэтому, пожалуйста, идите легко на меня с кодированием. FYI, я не знаю ничего за пределами stdio.h.

Это было полезно?

Решение

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.

Другие советы

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top