Hola. tengo el codigo hecho para pasar una cadena binaria a una de base 32. El funcionamiento está bien. sin embargo, al entregarle el dato de entrada, me da el ultimo dato de salida con un caracter "feo", que corresponde a la "ultima posicion" de un arreglo que sale de una función. Que puede estar mal? o cuando pasa esto???? gracias por cualquier ayuda!!!
dato de entrada:
10001110001010101010
dato de salida debería ser:
hola
PERO el dato de salida que me da es este:
hola
EL CODIGO LO INSERTO ACA ABAJO:
------------------------------------------------------------------------------------------------------
dato de entrada:
10001110001010101010
dato de salida debería ser:
hola
PERO el dato de salida que me da es este:
hola
EL CODIGO LO INSERTO ACA ABAJO:
------------------------------------------------------------------------------------------------------
Código (c) [Seleccionar]
#include<stdio.h>
#include<string.h>
////////////////////////////////////////////////////
//funcion para elevar potencias/////////////////////
int potencia(int base, int exponente){
int i,resultado;
resultado=1;
if (exponente > 0)
for (i=0;i<exponente;i++){
resultado=base*resultado;
};
return resultado;
}
///////////////////////////////////////////////////////////////////
////////funcion para cambiar base binario a decimal////////////////
void binario_atreintaidos(char *binario,char *treintaidos){
int porte,i,j,cont,parcial,letras;
porte=strlen(binario);
i=porte-1; //i almacena la cantidad de datos del binario
letras=porte/5;
for(j=0 ; porte>0 ; j++){
cont=0;
parcial=0;
while(cont<5){
if (binario[i]=='1') // correspondiente potencia de 2 en caso de haber un 1
parcial= potencia(2,cont) + parcial;
cont++;
i--;
}; //endwhile
porte=i;
cont=letras-j;
cont--;
switch (parcial){
case 0: treintaidos[cont]='0';break;
case 1: treintaidos[cont]='1'; break;
case 2: treintaidos[cont]='2'; break;
case 3: treintaidos[cont]='3'; break;
case 4: treintaidos[cont]='4'; break;
case 5: treintaidos[cont]='5'; break;
case 6: treintaidos[cont]='6'; break;
case 7: treintaidos[cont]='7'; break;
case 8: treintaidos[cont]='8'; break;
case 9: treintaidos[cont]='9'; break;
case 10: treintaidos[cont]='a'; break;
case 11: treintaidos[cont]='b'; break;
case 12: treintaidos[cont]='c'; break;
case 13: treintaidos[cont]='d'; break;
case 14: treintaidos[cont]='e'; break;
case 15: treintaidos[cont]='f'; break;
case 16: treintaidos[cont]='g'; break;
case 17: treintaidos[cont]='h'; break;
case 18: treintaidos[cont]='i'; break;
case 19: treintaidos[cont]='j'; break;
case 20: treintaidos[cont]='k'; break;
case 21: treintaidos[cont]='l'; break;
case 22: treintaidos[cont]='m'; break;
case 23: treintaidos[cont]='n'; break;
case 24: treintaidos[cont]='o'; break;
case 25: treintaidos[cont]='p'; break;
case 26: treintaidos[cont]='q'; break;
case 27: treintaidos[cont]='r'; break;
case 28: treintaidos[cont]='s'; break;
case 29: treintaidos[cont]='t'; break;
case 30: treintaidos[cont]='u'; break;
case 31: treintaidos[cont]='v'; break;
case 32: treintaidos[cont]='w'; break;
};//endswitch
}; //endfor
}; //endfuncion
///////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
int main(){
char cadena[50],treintaidos[50];
printf("ingrese numero binario \n");
scanf("%s",cadena);
printf("la conversion a base 10 es esta:\n");
binario_atreintaidos(cadena,treintaidos);
printf("%s \n",treintaidos);
return 0;
}