Ir ao conteúdo

Posts recomendados

Postado

Rapaziada, preciso ler um valor de um potenciometro e converter esse valor recebido para Hexadecimal, como faço ? (OBS : preciso armazenar esse valor HEX em uma variavel, não apenas printa-lo )

Postado
56 minutos atrás, Kaique_S.S disse:

Rapaziada, preciso ler um valor de um potenciometro e converter esse valor recebido para Hexadecimal, como faço ? (OBS : preciso armazenar esse valor HEX em uma variavel, não apenas printa-lo )

Se os valores não precisão de nenhum tratamento seria questão de só fazer algo assim.

char
*intToHex(int valor, char *conversao, int tamanho_maximo)
{
    int 
        contador1 = 0, contador2 = 0, contador3 = 0,
        resto = 0;
    char tmp_buffer[tamanho_maximo];
    do {
        if (contador1 < tamanho_maximo) {
            resto = valor%16;
            valor /=16;
            if (resto < 10) {
                tmp_buffer[contador1] = resto+'0';
            } else {
                tmp_buffer[contador1] = (resto-10)+'A';
            }
            contador1++;
        } else {
            return(NULL);
        }
    } while (valor);
    
    contador3 = contador1-1;
    for (contador2 = 0; contador2 < contador1; contador2++) {
        conversao[contador2] = tmp_buffer[contador3];
        contador3--;
    }
    conversao[contador2] = '\0';
    return(conversao);
}

mas eu lembro que no objeto string tem uma função para converter para todas as outra bases.

 

programa completo para tirar a colinha 😁

#include <stdio.h>

#define T_BUFFER 40

char
*intToHex(int valor, char *conversao, int tamanho_maximo)
{
    int 
        contador1 = 0, contador2 = 0, contador3 = 0,
        resto = 0;
    char tmp_buffer[tamanho_maximo];
    do {
        if (contador1 < tamanho_maximo) {
            resto = valor%16;
            valor /=16;
            if (resto < 10) {
                tmp_buffer[contador1] = resto+'0';
            } else {
                tmp_buffer[contador1] = (resto-10)+'A';
            }
            contador1++;
        } else {
            return(NULL);
        }
    } while (valor);
    
    contador3 = contador1-1;
    for (contador2 = 0; contador2 < contador1; contador2++) {
        conversao[contador2] = tmp_buffer[contador3];
        contador3--;
    }
    conversao[contador2] = '\0';
    return(conversao);
}

int main(void)
{
    int valor = 0;
    char valor_hex[20] = {'\0'};
    char buffer[T_BUFFER];
    do {
        do {
            printf("Digite um valor para ser convertido:");
            fgets(buffer, T_BUFFER, stdin);
            sscanf(buffer, "%i", &valor);
            if (valor <= 0) {
                printf("Esse programa so converte numeros positivos!\n");
            }
        } while (valor <= 0);
        if (intToHex(valor, valor_hex, 20) != NULL) {
            printf("O numero convertido para hexadecimal:%s\n", valor_hex);
        } else {
            printf("não foi possível converte o valor!\n");
        }
        printf("Digite C para continuar convertendo:");
        fgets(buffer, T_BUFFER, stdin);
    } while (buffer[0] == 'C' || buffer[0] == 'c');
    return(0);
}

versão online!

  • Membro VIP
Postado

Para algo [muito] mais minimalista - o mundo dos mc's - considere algo como

#define BCD2BYTE( b ) ( ( ( ( ( b ) >> 4 ) & 0x0f ) * 10 ) + ( ( b ) & 0x0f ) )
#define BYTE2BCD( b ) ( ( ( ( b ) / 10 ) << 4 ) + ( ( b ) % 10 ) )

Pode lhe ser uma vela (nos 2 sentidos 😜)

 

Mas de fato o mc trabalha diretamente com hexas não havendo necessidade de conversão a não ser quando for mostrar. Neste caso verifique se seu compilador tem a [gulosa] função printf que formata como desejar.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...