Converter hex digitalizados (scanf) a partir de um unsigned int matriz em decimal

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

  •  14-11-2019
  •  | 
  •  

Pergunta

Eu estou aqui tentando converter de 4 dígitos hexa em dezembro, mas não conseguiu.Aqui é o meu 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);

Eu não sei o que há de errado com ele, mas ele simplesmente não iria dar o correto dezembro de saída.Como quando eu colocar no EEFF, deveria dar 61183 mas o programa manteve na impressão 65518.

Onde é esse número?O que há de errado com o meu código?Eu usei int não assinado de acordo com a minha consideração que FFFF é igual a 65385 e o intervalo para unsigned int é de 0 a 65535.Não deve haver nenhum problema com o intervalo de dados e também usei %u com ele.

A única coisa que posso pensar agora depois de eu ter feito alguma pesquisa é que este problema tem de hts a ver com o tamanho da unsigned int int ou hts.Eu li a explicação, mas não entendo muito bem.

Eu sei, isso pode ser uma duplicação, mas estou aqui, pedindo uma explicação mais fácil por que isso não funciona.Para ser honesto, eu estou absolutamente newby, tanto para este site e programação de então, por favor, trate-me com a codificação.FYI, eu realmente não sei nada fora do stdio.h .

Foi útil?

Solução

Você está passando um ponteiro, array, para printf().Não há nenhuma necessidade para uma matriz aqui, o que você está tentando digitalizar e imprimir um número único.

unsigned int number;

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

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

Observe também que é considerada uma boa idéia para verificar se scanf() sucesso ou não, inspecionando o valor de retorno.

Outras dicas

Você não precisa de uma matriz para que:

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

um.imprimir array[0], não array.

(opcional) b.digitalizar para array, não &array.

c.qual é o ponto de getchar()?

Não, você deve entrada de seqüência de caracteres para um ponto de personagens.Depois que você converter em número.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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top