Hola
Tengo una función que debe leer un número binario y transformarlo a decimal, bien ya lo tenia pensado y lo implemente, pero creo que tengo un problema, leo el numero binario en un array de caracteres (char[]) de tamaño fijo (21), pero creo que no puedo manejarlo bien, tengo el siguiente código:
int BINDEC(char[21] pBinario)
{
unsigned int res = 0;
int potencia = 1;
int longitud = strlen(pBinario);
if(longitud == 1)
{
return char[0];
}
else
{
res = char[0];
for(int i = longitud; i >= 1; i--)
{
potencia * 2;
res += pBinario[i - 1] * potencia;
}
return res;
}
}
No se si exista alguna función o algo para manejar binarios o quizás para convertir de char a int, además de eso me manda un error en:
int BINDEC(char[21] pBinario)
Creo que no esta bien definido, ojala puedan ayudarme soy nuevo en C.
Gracias.
Hay varios problemas en tu código, para empezar, la función no se declara como la has puesto, sino de esta manera:
int BINDEC( char pBinario[ 21 ] )
Luego, en el código haces referencia a una variable llamada
char cuando debieras usar
pBinario, recuerda,
char es un tipo de dato, y pBinario es una variable que declaraste como un array de ese tipo de datos.
Tu contador empieza en una posición errónea, debiera ser longitud - 2. También, no hay necesidad de que coloques esto:
res = pBinario[0]; // (tú pusiste res = char[ 0 ], lo cual está mal.
fuera del ciclo, bien puedes meterlo y hacer que el ciclo termine al llegar a 0 y no a 1.
Por último, estás tratando de obtener los valores 1 o 0 del array, pero estos son valores de tipo
char y no enteros, puedes hacer la suma pero te dará algo completamente erróneo de esa forma. Puedes obtener el dígito 1 o 0 de esta forma:
int digito;
digito = pBinario[ i ] == '1' ? 1 : 0;
Espero te sirva, ya luego comentarás. Por cierto, quizá esto te sirva:
http://codigolatino.allhyper.com/private/E...vate/nueve.html(A ver si no lo borra JuanK
).
Saludos,
JJ (Geo).