Hola, tengo un programa de conversión de base numérica para cualquier base con un rango de 1 byte, el programa funciona correctamente, mi asunto es que esta programada en C++ y lo necesito en C, podría alguien ayudarme a pasarlo? o decirme como funcionan las funciones que aparecen?
Código:
#include<iostream>
#include<cmath>
#include<bitset>
using namespace std;
//DECLARACION DE FUNCIONES:
int baseCharAInt(char []);
int numCharAInt(char[],double);
void convierte(int ,int);
int main(){
const char ask=168; //PARA QUE SALGA EL SIGNO "¿"
char baseInChar[3],baseOutChar[3],repetir='s';
char numInChar[]={0,0,0,0,0,0,0,0};
int baseIn,baseOut,numIn;
cout<<"\t\t*BASES: HEX=X16 DEC=X10 OCT=X8 BIN=X2\n\n";
while(repetir=='s'||repetir=='S'){
cout <<"--->"<<ask<<"EN QUE BASE ESTA TU NUMERO ORIGINAL?: ";
cin >>baseInChar;
baseIn=baseCharAInt(baseInChar); if(baseIn==0)cout<<"\n\n \t\tBASE NO VALIDA!!!\n";
if(baseIn!=0){
cout <<"\n--->"<<ask<<"A QUE BASE DESEAS CONVERTIR TU NUMERO?: ";
cin >>baseOutChar;
baseOut=baseCharAInt(baseOutChar);if(baseOut==0)cout<<"\n\n \t\tBASE NO VALIDA!!!\n";
}
if(baseIn!=0&&baseOut!=0){
cout <<"\n--->"<<ask<<"CUAL ES EL DICHOSO NUMERO A CONVERTIR?: ";
cin >>numInChar;
numIn=numCharAInt(numInChar,baseIn);
cout<<"\n\n\t\t*Muy bien. Tu numero en base "<<baseOutChar<< " es: ";
convierte(numIn,baseOut);
}
cout<<"\n\n\n"<<ask<<"Quieres convertir algun otro numerillo? (S/N): ";
cin>>repetir;
cout<<"\n\n";
cin.get();
}
}
//CONVIERTE LA BASE DE CHAR A INT
int baseCharAInt(char baseChar[3]){
int base;
if(baseChar[1]=='1'&&baseChar[2]=='6') base=16;
else if(baseChar[1]=='1'&&baseChar[2]=='0') base=10;
else if(baseChar[1]=='8')base=8;
else if(baseChar[1]=='2')base=2;
else base=0;
return base;
}
//CONVIERTE EL NUMERO DE CHAR A SU VALOR EN FORMATO DOUBLE:
int numCharAInt(char numChar[],double base){
int length;
for(int i=1;numChar!=0;i++) length=i+1;
int num=0;
int numArr[length];
for(int j=0;j<length;j++){ //USANDO ASCII PARA DARLE UN VALOR NUMERICO A LOS CARACTERES DE '1'-'9', 'A'-'F' y 'a'-'f'
if(numChar[j]<=57)
numArr[j]=numChar[j]-48;
else if(numChar[j]<=70)
numArr[j]=numChar[j]-55;
else if(numChar[j]<=102)
numArr[j]=numChar[j]-87;
}
for(int k=0;k<=length-1;k++) num+=numArr[k]*pow(base,length-1-k);
return num;
}
//MUESTRA EL VALOR DEL NUMERO EN LAS DISTINTAS BASES:
void convierte(int num,int baseOut){
switch(baseOut){
case 10: cout<<num; break;
case 16: cout<<noshowbase<<hex<<num;break;
case 8: cout<<noshowbase<<oct<<num;break;
case 2: cout <<bitset<8>(num);break;
}
}