Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Conversione da binario a decimale
Forum - C/C++ - Conversione da binario a decimale

Avatar
Liuk (Normal User)
Rookie


Messaggi: 21
Iscritto: 01/09/2011

Segnala al moderatore
Postato alle 12:27
Giovedì, 08/09/2011
Ciao, ho un programma che prende una stringa in binario e la deve convertire in decimale (devono essere 24 bit).

Qui è dove prendo la stringa:

Codice sorgente - presumibilmente C#

  1. int main()
  2. {
  3.     int i, flag=0;
  4.     char bin[DIM], tmpBin[DIM];
  5.     clear();
  6.     setColor(1, 0, 32);
  7.     printf("\n Conversioni tra basi\n");
  8.     setColor(1, 0, 1);
  9.     do
  10.     {
  11.         flag = 0;
  12.         printf("\n Inserisci numero in binario (24bit): ");
  13.         gets(tmpBin);
  14.         if(isBinary(tmpBin, strlen(tmpBin)) == 0 || strlen(tmpBin) !=  24)
  15.             flag=1;
  16.     }
  17.     while(flag==1);
  18.     strcpy(tmpBin, bin);
  19.     printf(" In decimale: %d", binToDec(bin, strlen(bin)));
  20.     printf("\n In esadecimale: %d", decToHex(binToDec(bin, strlen), strlen(bin)));
  21.     pEnter();
  22.     clear();
  23.     return 0;
  24. }



e questa è la funzione che dovrebbe convertire:

Codice sorgente - presumibilmente C++

  1. int binToDec(char bin[], int len)
  2. {
  3.     char convBin[DIM];
  4.     int i, j;
  5.     int ris=0;
  6.     for(i=0, j=len; i<len; i++, j--)
  7.     {
  8.         ris +=(int) (bin[i]-0)*pow(2, j);
  9.     }
  10. }



Solo che mi da segmentation fault. Aiuto :(

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 695
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 13:02
Giovedì, 08/09/2011
Testo quotato

Postato originariamente da Liuk:

Ciao, ho un programma che prende una stringa in binario e la deve convertire in decimale (devono essere 24 bit).

[...]

e questa è la funzione che dovrebbe convertire:

Codice sorgente - presumibilmente C++

  1. int binToDec(char bin[], int len)
  2. {
  3.     char convBin[DIM];
  4.     int i, j;
  5.     int ris=0;
  6.     for(i=0, j=len; i<len; i++, j--)
  7.     {
  8.         ris +=(int) (bin[i]-0)*pow(2, j);
  9.     }
  10. }



Solo che mi da segmentation fault. Aiuto :(



Salve,

ci sono delle cose che non comprendo;

+=(int): non l'ho mai visto, ma suppongo che sia un cast esplicito, giusto?

pow(2, j): e' una funzione che hai scritto tu? Magari l'errore potrebbe essere li';

char convBin[DIM]: a che serve?

return ris: manca alla fine della funzione;

in ogni caso io proverei a farla, cosi':

Codice sorgente - presumibilmente C++

  1. int binToDec(char bin[], int len)
  2. {
  3.   int ris;
  4.  
  5.   if (bin[len] == '1') { ris = 1; }
  6.   else  { ris = 0; }
  7.  
  8.   if (len > 1) { ris += 2 * binToDec(bin, len - 1) ); }
  9.  
  10.   return ris;
  11. }



Ciao.

Ultima modifica effettuata da gigisoft il 08/09/2011 alle 14:03


Le cose si fanno per bene o non si fanno affatto
PM Quote