Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21
  1. #11
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da ESSE-EFFE
    Non sei molto lontano dall'ottenere quello che ti serve. Solo che non puoi semplicemente utilizzare myArray[index], ma devi crearti una funzione che prenda quel valore in ingresso e restituisca una stringa con il corrispondente valore binario.

    Comunque intFread non stamparlo per ogni byte, basta una volta dopo la fread.
    non ho capito, devo farmi da solo la funzione che mi passa il valore da decimale a potenze di 2? Cioé quella funzione non riesce a trasformarmi tutto in binario da sola?

  2. #12
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    non ho capito, devo farmi da solo la funzione che mi passa il valore da decimale a potenze di 2? Cioé quella funzione non riesce a trasformarmi tutto in binario da sola?
    Il carattere che leggi è in binario! e ci rimane anche quando lo carichi in memoria..
    Tu vuoi scrivere il numero corrispondente del carattere ASCII in binario, utilizzando i caratteri ASCII 0 e 1, e questo la fread non lo fa.

    La fread si limita a caricare in memoria una parte del file "fregandosene" se i dati sono formattati o no.

  3. #13
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da XAlbeX
    Il carattere che leggi è in binario! e ci rimane anche quando lo carichi in memoria..
    Tu vuoi scrivere il numero corrispondente del carattere ASCII in binario, utilizzando i caratteri ASCII 0 e 1, e questo la fread non lo fa.

    La fread si limita a caricare in memoria una parte del file senza contare se i dati nel file sono formattati o no.
    come si fa quello che voglio fare?

  4. #14
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    Dopo che hai letto il carattere, utilizzi un buffer e con un ciclo formatti il numero scrivendolo in binario.. Utilizzi l'and binario per sapere se il bit meno significativo è settato o no, scrivi il carattere ASCII corrispondente e poi "shifti" di uno il numero per ricominciare con il bit successivo..

    Forse c'è anche qualche funzione standard che lo fa.. (anche se non credo)

  5. #15
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    ok, qualcuno mi fa vedere questa funzione di conversione come andrebbe fatta?

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    codice:
    void binary (char *output, char value)
    {
    	char *ptr = output + 7; // si posiziona in fondo.. 
    
    	while (ptr >= output) // scrive tutti gli otto caratteri
    	{
    		*ptr-- = (value & 1) + '0'; // scrive 0 o 1 a seconda se il bit è settato
    		value >>= 1; // esegue lo shift a destra
    	}
    }
    E' per farti capire..
    Stai attento perché non controlla se la lunghezza del buffer è adeguata, e non mette neanche il carattere di terminazione..

  7. #17
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    ti ringrazio, adesso ho letto il tuo post, nel frattempo ho sviluppato una mia implementazione

    codice:
    #include <stdio.h>
    
    int main(){
        int varX=-4;
        int varY;
        if(varX<0){
            printf("1");
            varX=(varX*-1);
        } else printf("0");
        for (varY=128; varY!=0; varY>>=1){
            printf (varX & varY ? "1" : "0");
        }
    }
    ma non ne sono molto soddisfatto, è un po' sporco nel codice, come posso migliorarlo? ci sono modi migliori per scrivere una conversione in binario?

    ovviamente ho incluso anche il bit del segno già che ci sono, faccio una funzione che mi converte tutti gli interi.

  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    Per rappresentare i numeri negativi nei calcolatori si usa il complemento a due perché perché permette di eseguire addizioni e sottrazioni senza controllare il segno. (E non il bit del segno come nel tuo esempio)

    Ti consiglio di fare un cast ed utilizzare una variabile unsigned char.. se prima era negativo dovrebbe mantenere il complemento a due.. altrimenti devi fare un cast passando per i puntatori..


    edit: anzi non dovrebbe neanche servire il cast fin che utilizzi l'and binario

  9. #19
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    codice:
    #include <stdio.h>
    #include <math.h>
    #define nbit 8
    
    int main(){
        int varX=-1;
        int varY;
        int varBinary[nbit];
        int counter;
        int isNegative=0;
        if(varX<0){
            isNegative=1;
            varX=-varX;
        } else isNegative=0;
        varBinary[0]=0;
        for (varY=(((int)pow(2,nbit-1))-1),counter=1; varY!=0; varY>>=1,counter++){
            varBinary[counter] = (varX & varY ? 1 : 0);
        }
        int oneFound=0;
        if(isNegative){
            for(counter=nbit-1;counter>=0;counter--){
                if(!oneFound){
                    if(varBinary[counter]==1) oneFound=1;
                } else {
                    varBinary[counter]=!varBinary[counter];
                }
            }
        }
        printf("\n---\n");
        for (counter=0; counter<nbit; counter++){
            printf("%d",varBinary[counter]);
        }
        printf("\n---\n");
    }
    mi si presentano codifiche errate per valori come

    -1
    -127

    ed entrambi vengono codificati allo stesso modo

    - se il numero è negativo metto ad 1 una variabile int, in pratica la uso come booleana
    - il numero se negativo lo tratto come modulo e codifico come sempre
    - se il numero è negativo procedo da destra a sinistra e trovato il primo 1 inverto tutte le cifre che trovo a seguire


    non mi codifica bene neanche -128

  10. #20
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    risolto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.