Simples header - Bases numéricas

Iniciado por Dark_Side, 06 de Setembro , 2006, 12:56:14 AM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

Dark_Side

Hi,
Segue abaixo um simples header que pode ser utilizado para conversões de bases numéricas.
O header possui as seguintes funções:

dec2bin -  Converte um valor de decimal para binário;
dec2oct -  Converte um valor de decimal para octal;
dec2hex -  Converte um valor de decimal para hexadecimal;

bin2dec -  Converte um valor de binário para decimal;
oct2dec -  Converte um valor de octal para decimal;
hex2dec - Converte um valor de hexadecimal para decimal.

Segue abaixo o código:

bases.h
#include <math.h>
#include <string>
#include <cstdlib>
#include <cstdio>
// Conversão de decimal(sem sinal) para binário
char* dec2bin(unsigned long dec)
{
  string bin;
       while(dec > 0){
                 bin += char(dec % 2 + '0');
                 dec /= 2;}
     return strrev((char*)bin.c_str());
     
      }

// Conversão de decimal para octal
long dec2oct(unsigned long dec){
     string oct;
       while(dec > 0)
       {
         oct += char(dec % 8 + '0');
         dec /= 8;}         
                 
       return atoi(strrev((char*)oct.c_str()));
       
}

// Conversão de decimal (sem sinal) para hexadecimal
char* dec2hex(unsigned long dec){
     string hex;
     char v;
       while(dec > 0)
       {
         v = char(dec % 16 + '0');
         if(v <= '9')
         hex+= v;
         else
         hex+= 'A' + (v-'0') % 10;
                         
         dec /= 16;}         
                 
       return strrev((char*)hex.c_str());
       
}

// Conversão de binário para decimal
unsigned long bin2dec(char * bin)
{
    unsigned long dec=0;
    int i;
for(i=0;i<strlen(bin);i++){
if(bin[i] != '0' && bin[i] != '1') return 0;
dec = (dec*2)+ bin[i]-'0';
}
return dec;
}

// Conversão de octal para decimal
unsigned long oct2dec(long oct)
{
unsigned long dec=0;
    int i;
    char * aux = new char[0x20];
    sprintf(aux,"%ld",oct);

    if(strlen(aux) > 1) for(i = 0;i< strlen(aux);i++)   if(aux[i] - '0' > 7) return 0;

    for(i = 0;i<strlen(aux);i++)    dec  = (dec * 8) + aux[i]-'0';

return dec;
}

//Conversão de hexadecimal para decimal
unsigned long hex2dec(char * hex)
{
   unsigned long dec=0;
    int i;
   
for(i=0;i<strlen(hex);i++){
if(hex[i] > 'F' || hex[i] > 'f') return 0;
else if(hex[i] >= 'a' && hex[i] <= 'f') hex[i] = hex[i]-32;
switch(hex[i]){
 case 'A': dec = (dec*16)+ 10; break;
 case 'B': dec = (dec*16)+ 11; break;
 case 'C': dec = (dec*16)+ 12; break;
 case 'D': dec = (dec*16)+ 13; break;
 case 'E': dec = (dec*16)+ 14; break;
 case 'F': dec = (dec*16)+ 15; break;
 default:
dec = (dec*16)+ hex[i]-'0';                             
}
}
return dec;
}

Download direto: http://three.fsphost.com/darkside/proje ... pp/bases.h

Bye  ;D