int uleb128ToUint(FILE *fp, int *from) { setOffset(fp, *from); int *bits, *temp = (int *)malloc(sizeof(int) * 8); int count = 1, i, j, a, y, z = 0, somma = 0; //aumenta il count finchè trova byte con il bit più significativo settato a 1 while((bits = byteToBits(fgetc(fp)))[7] == 1) { count++; } int **converted = (int **)malloc(sizeof(int *) * count); fseek(fp, *from, 0); //aggiorno il puntatore al prossimo byte per una lettura futura *from += count; //inizializzo l'array "converted" for(i = 0; i < count; i++) { converted[i] = (int *)malloc(sizeof(int) * 7); } //inserisce nell'array "converted" tutti i byte che compongono il numero for(i = 0; i < count; i++) { temp = byteToBits(fgetc(fp)); for(j = 0; j < 7; j++) { converted[i][j] = temp[j]; } } //rovescia l'array (little-endian) for(i = 0; i < count; i++) { y = 6; for(j = 0; j < 4; j++) { a = converted[i][j]; converted[i][j] = converted[i][y]; converted[i][y--] = a; } } //calcola il numero for(i = 0; i < count; i++) { for(j = 6; j >= 0; j--) { if(converted[i][j] == 1) { somma += potenza(2, z); } z++; } } return somma; }
int main() { double n, ris=0; char op; cout<<"ELENCO OPERAZIONI DISPONIBILI:\n"<<endl; cout<<"somma (+)"<<endl; cout<<"sottrazione (-)"<<endl; cout<<"prodotto (*)"<<endl; cout<<"divisione (/)"<<endl; cout<<"inverso di un numero (!)"<<endl; cout<<"potenza (^)"<<endl; cout<<"radice quadrata (R)"<<endl; cout<<"visualizzazione risultato (=)"<<endl; cout<<"\n\nPrimo numero: "; cin>>ris; while (op!='='){ cout<<"Operatore: "; cin>>op; switch (op) { case '+': cout<<"Secondo numero: "; cin>>n; ris=somma(ris,n); break; case '-': cout<<"Secondo numero: "; cin>>n; ris=sott(ris,n); break; case '*': cout<<"Secondo numero: "; cin>>n; ris=prodotto(ris,n); break; case '/': cout<<"Secondo numero: "; cin>>n; ris=divisione(ris,n); break; case '!': ris=inverso(ris); break; case '^': cout<<"Secondo numero: "; cin>>n; while(ris==0 && n<0){ cout<<"Errore! Reinserire il secondo numero (maggiore di 0)(In base alla scelta dei matematici): "; cin>>n; } ris=potenza(ris,n); break; case 'R': ris=radice(ris); break; case '=': cout<<ris<<endl; break; default: cout<<"operazione non possibile"<<endl; } } getchar(); return 0; }