Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Então, vou postar aqui um programinha que faz conversão de base. Estou explorando agora o C/C++ e me familiarizando com a sintaxe da linguagem.
Estou também tendo alguns probleminhas para tratamento de String, que em C não é nada intuitivo como em outras linguagens que já mexo. Más segue abaixo o fonte do programa, no final só falta inverter agora o resultado da conversão e consertar o problemas dos caracteres sobrando.
Deve ter uma forma mais simples de se fazer, más estou começando com C agora.
/*
Autor: Josimar Batista Gomes
Descrição: Programa que converte numero decimal em hexadecimal
Data: 12-08-2014
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
int numeroEntrada, q, resto;
char exa[10], getInt[10];
printf("Informe um numero para converter para EXADECIMAL\n\n");
printf("NUMERO => ");
scanf("%i", &numeroEntrada);
do{
q = numeroEntrada / 16;
resto = numeroEntrada % 16;
numeroEntrada /= 16;
switch(resto){
case 10:
strcat(exa, "A");
break;
case 11:
strcat(exa, "B");
break;
case 12:
strcat(exa, "C");
break;
case 13:
strcat(exa, "D");
break;
case 14:
strcat(exa, "E");
break;
case 15:
strcat(exa, "F");
break;
case 16:
strcat(exa, "G");
break;
default:
sprintf(getInt, "%i", resto);
strcat(exa, getInt);
}
}while(q != 0);
printf("%s", exa);
return 0;
}
Ainda falta muito para funcionar como se deve. Não testei muito e encontrei alguns erros, más creio que a lógica segue por aí.
"Agora percebi, eu escrevi hexadecimal sem o H, até na declaração de minha variável. Perdão aí pela falta de atenção rsrsrsrsrs"
Valew amigo ScreenBlack, vou inicializar meus vetores de caracteres agora. :yes:
Qualquer dúvida ou algum outro problema posto aqui.
/*
Autor: Josimar Batista Gomes
Descrição: Programa que converte numero decimal em hexadecimal
Data: 12-08-2014
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
int numeroEntrada, q, resto, i;
char hexa[10] = {'\0'}, getInt[10] = {'\0'};
printf("Informe um numero para converter para HEXADECIMAL\n\n");
printf("NUMERO => ");
scanf("%i", &numeroEntrada);
do{
q = numeroEntrada / 16;
resto = numeroEntrada % 16;
numeroEntrada /= 16;
switch(resto){
case 10:
strcat(hexa, "A");
break;
case 11:
strcat(hexa, "B");
break;
case 12:
strcat(hexa, "C");
break;
case 13:
strcat(hexa, "D");
break;
case 14:
strcat(hexa, "E");
break;
case 15:
strcat(hexa, "F");
break;
case 16:
strcat(hexa, "G");
break;
default:
sprintf(getInt, "%i", resto);
strcat(hexa, getInt);
}
}while(q != 0);
for(i=strlen(hexa); i >= 0; i--){
printf("%c", hexa[i]);
}
return 0;
}
Muito bom mesmo. O problema todinho estava na inicialização de minhas variáveis.
Testei aqui e até agora nenhum bug. O programinha tá fazendo aquilo que é pra fazer rsrsrs. Valew amigo ScreenBlack pela força e já te dei 1 ponto de reputação e o código fica aí pra quem quiser otimiza-lo.
:clap:
int num;
printf("Decimal: %d Hexadecimal: %02x\n", num, num & 0xFF);
Ou: printf("Decimal: %d Hexadecimal: 0x%02x\n", num, num & 0xFF);
Ou: printf("Decimal: %d Hexadecimal: %X\n", num, num & 0xF);
Realmente trabalhar com string em C, inicialmente gera muita dúvida, por ter de ficar pensando em caracteres e não como string, como acontece em outras linguagens. Mas com o tempo isso vira rotina.
Como em C não existe o tipo string, então precisamos de uma forma para fazer com que o programa identifique o término do vetor de caracteres. Utiliza-se um carácter especial para essa finalidade, que é o '\0'.
Ele costuma ser tratado automaticamente quando utilizamos as funções da biblioteca "string.h", porém, também precisamos fazer nossa parte, para que a função não trate os valores de maneira errada, como por exemplo: Estourar a quantidade de carácteres permitidos no vetor ou retirar um carácter dele.
Uma forma de garantir que existirá um terminador de string no vetor quando for adicionar informação pela primeira vez, é inicializa-lo com o carácter especial em todas as posições.
Exemplo:
Acredito que, apenas inicializando-as, você não já não terá erros na saída da execução do programa.
Uma outra coisa que faltou no código, foi inverter a ordem do resultado, para poder mostrar o valor em hexa corretamente:
for ( i = 0; i < (strlen(hexa) / 2); i++ )
{
Att.