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 (http://three.fsphost.com/darkside/projetos/c-cpp/bases.h)
Bye