Преобразовать шестнадцатеричное сканирование (scanf) из массива int без знака в десятичное - PullRequest
1 голос
/ 27 января 2012

Я пытаюсь преобразовать 4-значную гекса в декабрь, но безуспешно.Вот мой код.

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 с ним.

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

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

Ответы [ 4 ]

6 голосов
/ 27 января 2012

Вы передаете указатель, 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() успешно или нетпроверяя возвращаемое значение.

2 голосов
/ 27 января 2012

Для этого вам не нужен массив:

unsigned int val;
printf("Type in 4-digit hexa: \n");
scanf("%x", &val);
printf("Your number in dec is %u \n", val);
1 голос
/ 27 января 2012

а.печать array[0], а не array.

(необязательно) b.сканировать до array, а не до &array.

c.какой смысл у getchar()?

0 голосов
/ 27 января 2012

Нет, вы должны вводить в виде строки до точки символов. После этого вы конвертируете в число. 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);
...