Pages: [1]   Go Down
Author Topic: Atascado - Conversor Binario a Decimal  (Read 3193 times)
0 Members and 1 Guest are viewing this topic.
Madrid
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, estoy desarrollando un pequeño firmware para mi Arduino Mega y necesito convertir un array de X tamaño binario a un número decimal.

Esta es la función que he desarrollado:
Code:
int binToDec(int orig[], int tam){
  int acum = 0, pot;
  double aux;
  for (int i = (tam-1); i >= 0; i--){
    if (orig[i] == 1){
      pot = (tam-1)-i;
      aux = orig[i]*pow(2,pot);
    }
    else{
      aux = 0;
    }
    acum += int(aux);
    pot = 0;
    aux = 0;
  }//for
 
  return acum;
}//binToDec

Los números del '0000' (0) al '0011' (3) los convierte perfectamente, a partir de ahí empieza a quedarse con una unidad.

Gracias por vuestra ayuda.
Logged

Doing as nobody do before

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aquí te dejo el algoritmo que hice para mis programas, adaptado a tu caso:

Code:
int binToDec(int orig[], int tam){
  int result = 0;
  for (int i=0;i<tam;i++){
    result *= 2;
    result += orig[i];
  }
  return result;
}

Un saludo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

chiva,hay algo que no me cuadra ahi...pásale un 0b10 (2 decimal), 0b100,0b1000,.... y veras que pasa....
« Last Edit: February 15, 2011, 05:03:45 pm by Igor R » Logged


Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No he probado el código, lo he rehecho de un programa que tenía por ahí y usaba un while y un puntero independiente al del vector, por lo que he tenido que modificarlo casi entero.

¿Que fallo le ves? Así a ojo no le veo nada malo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

número=b100

i=0
result=0*2=0
result=0+0=0

i=1
result=0*2=0
result=0+0=2

i=2
result=0*2=0
result=0+1=1


no??
Logged


Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

¿Y no sería mas bien?

número=b100

i=0
result=0*2=0
result=0+1=1

i=1
result=1*2=2
result=2+0=2

i=2
result=2*2=4
result=4+0=4

Al menos en España leemos los números de izquierda a derecha, no se como lo haréis en UK smiley-razz
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

uy!! desde que conduzco al revés...... smiley-kiss
Inconscientemente lo leía como se ve en binario de derecha a izquierda, y me he "liao".

Sirve si digo que no has especificado si era formato intel o motorola???   smiley-wink


ja,ja,ja
« Last Edit: February 15, 2011, 05:49:25 pm by Igor R » Logged


Pages: [1]   Go Up
Jump to: