Archivio

Posts Tagged ‘decimale’

Ottenere il valore decimale da un numero binario in C

12 dicembre 2008 hds619 Nessun commento

Vi sarà capitata l’occasione di ritrovarvi una stringa contenente un numero binario e di doverlo convertire in un numero decimale ( o comunque memorizzarlo in una variabile ) e utilizzare i procedimenti più assurdi per farlo? No? Beati voi, a me è capitato.. anzi in particolar modo è capitato di avere i vari 1 e 0 divisi in varie variabili.. In questo post farò vedere un metodo, a mio avviso elegante, per ottenere la nostra decantata variabile contenente il valore decimale.

Ed ecco qui, subito subito la funzione:

unsigned char get_value_from_binary_string (const char *s)
{
 short int i;
 unsigned char byte = 0;
 
 if ( !s || strlen (s) != ( sizeof (unsigned char) * 8 ) )
      return byte;
 
 for ( i = (sizeof (unsigned char) * 8) - 1; i > -1; i-- )
       byte = ( byte | (s[(sizeof (unsigned char) * 8) - ( 1 + i )] - '0') ) << ( i ? 1 : 0 );
 
 return byte;
}

Naturalmente qua si parla di una stringa contenente il valore di un byte, ma è facilmente utilizzabili con stringhe contenenti valori di 2, 4, 8, 16, 32 e 64 byte utilizzando le variabili appropriate.
Il fulcro della conversione comunque sta in quelle due righe di for. 2 righe e si fa quello che molti altri farebbero in minimo 20 in modo osceno.

Ciauz ;)

Custom Avatars For Comments