Conversão entre Decimal, Hexadecimal e BCD em C++, com Funções e Impressão Formatada

Conversões Numéricas

Implementações em C++ para conversão entre diferentes formatos numéricos, icnluindo decimal, hexadecimal e BCD, com uso de funções bem definidas e saída formatada via printf.

Função: Inversão de Bytes

Realiza o complemento de um byte em dados binários:


int inverterBytes(unsigned char *saida, const unsigned char *entrada, int tamanho) {
    for (int i = 0; i < tamanho; ++i) {
        saida[i] = entrada[i] ^ 0xFF;
    }
    return 0;
}

Hexadecimal para Decimal

Converte uma sequência de bytes em formato hexadecimal para um valor decimal:


unsigned long hexParaDecimal(const unsigned char *hex, int length) {
    unsigned long resultado = 0;
    for (int i = 0; i < length; ++i) {
        resultado += (unsigned long)(hex[i]) << (8 * (length - 1 - i));
    }
    return resultado;
}

Decimal para Hexadecimal


int decimalParaHex(int valor, unsigned char *saida, int tamanho) {
    for (int i = tamanho - 1; i >= 0; --i) {
        saida[i] = (valor % 256) & 0xFF;
        valor /= 256;
    }
    return 0;
}

Potência de Base

Calcula a potência de um número com base e expoente inteiros:


unsigned long potencia(int base, int expoente) {
    unsigned long resultado = 1;
    for (int i = 0; i < expoente; ++i) {
        resultado *= base;
    }
    return resultado;
}

BCD para Decimal

Convetre um número codificado em BCD para seu valor decimal equivalente:


unsigned long bcdParaDecimal(const unsigned char *bcd, int tamanho) {
    unsigned long valor = 0;
    for (int i = 0; i < tamanho; ++i) {
        int dezena = (bcd[i] >> 4) & 0x0F;
        int unidade = bcd[i] & 0x0F;
        valor += (dezena * 10 + unidade) * potencia(100, tamanho - 1 - i);
    }
    return valor;
}

Decimal para BCD


int decimalParaBcd(int valor, unsigned char *bcd, int tamanho) {
    for (int i = tamanho - 1; i >= 0; --i) {
        int temp = valor % 100;
        int dezena = temp / 10;
        int unidade = temp % 10;
        bcd[i] = (dezena << 4) | unidade;
        valor /= 100;
    }
    return 0;
}

Exemplo de Uso no main()


#include <iostream>
using namespace std;

int main() {
    unsigned char bcd[3] = {0x00, 0x53, 0x20};
    unsigned long valorDecimalBcd = bcdParaDecimal(bcd, 3);
    cout << "Decimal (BCD): " << valorDecimalBcd << endl;

    unsigned char saidaBcd[3];
    decimalParaBcd(valorDecimalBcd, saidaBcd, 3);
    for (int i = 0; i < 3; ++i) {
        printf("BCD[%d] = 0x%02X\n", i, saidaBcd[i]);
    }

    unsigned char hex[3] = {0x00, 0x53, 0x20};
    unsigned long valorDecimalHex = hexParaDecimal(hex, 3);
    cout << "Decimal (HEX): " << valorDecimalHex << endl;

    unsigned char saidaHex[3];
    decimalParaHex(valorDecimalHex, saidaHex, 3);
    for (int i = 0; i < 3; ++i) {
        printf("HEX[%d] = 0x%02X\n", i, saidaHex[i]);
    }

    return 0;
}

Impresão Formatada com printf

Exemplos de formatação de saída para diferentes bases numéricas:


int valor = 9;

// Saída decimal
printf("%d\\n", valor);         // 9
printf("%4d\\n", valor);        //    9
printf("%04d\\n", valor);       // 0009

// Saída hexadecimal
printf("%x\\n", valor);         // 9
printf("%4x\\n", valor);        //    9
printf("%04x\\n", valor);       // 0009

// Saída octal
printf("%o\\n", valor);         // 11
printf("%4o\\n", valor);        //   11
printf("%04o\\n", valor);       // 0011

Funções em C++

Funções são blocos de código reutilizáveis que realizam tarefas específicas. Um programa C++ sempre começa com a função main().

Declaração e Definição

Exemplo de função que retorna o maior entre dois números:


int maximo(int a, int b) {
    return (a > b) ? a : b;
}

Chamada de Função


int resultado = maximo(100, 200);
cout << "Máximo: " << resultado << endl;

Parâmetros Padrão


int soma(int a, int b = 20) {
    return a + b;
}

int valor1 = soma(100);     // retorna 120
int valor2 = soma(100, 50); // retorna 150

Lambdas

Expressões lambda permitem criar funções anônimas inline:


auto comparar = [](int x, int y) { return x < y; };
int total = [](int a, int b) -> int { return a + b; }(10, 20);

Tags: C++ conversão numérica hexadecimal BCD printf

Publicado em 9-28 15:42