Oppure

Loading
08/09/11 10:27
Liuk
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:

int main()
{
    int i, flag=0;
    char bin[DIM], tmpBin[DIM];
    clear();
    setColor(1, 0, 32);
    printf("\n Conversioni tra basi\n");
    setColor(1, 0, 1);
    do
    {
	flag = 0;
	printf("\n Inserisci numero in binario (24bit): ");
	gets(tmpBin);
	if(isBinary(tmpBin, strlen(tmpBin)) == 0 || strlen(tmpBin) !=  24)
    	    flag=1;
    }
    while(flag==1);
    strcpy(tmpBin, bin);
    printf(" In decimale: %d", binToDec(bin, strlen(bin)));
    printf("\n In esadecimale: %d", decToHex(binToDec(bin, strlen), strlen(bin)));
    pEnter();
    clear();
    return 0;
}


e questa è la funzione che dovrebbe convertire:

int binToDec(char bin[], int len)
{
    char convBin[DIM];
    int i, j;
    int ris=0;
    for(i=0, j=len; i<len; i++, j--)
    {
	ris +=(int) (bin[i]-0)*pow(2, j);
    }
}


Solo che mi da segmentation fault. Aiuto :(
aaa
08/09/11 11:02
gigisoft
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:

int binToDec(char bin[], int len)
{
    char convBin[DIM];
    int i, j;
    int ris=0;
    for(i=0, j=len; i<len; i++, j--)
    {
	ris +=(int) (bin[i]-0)*pow(2, j);
    }
}


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':


int binToDec(char bin[], int len)
{
  int ris;

  if (bin[len] == '1') { ris = 1; }
  else  { ris = 0; }

  if (len > 1) { ris += 2 * binToDec(bin, len - 1) ); }

  return ris;
}



Ciao.
Ultima modifica effettuata da gigisoft 08/09/11 12:03
aaa