Scrivere una sequenza di bit su file

di il
3 risposte

Scrivere una sequenza di bit su file

Ciao a tutti...

avrei bisogno di un aiutino, cioè dovrei scrivere su file una sequenza di bit contenuti in una stringa (es: "010010001") però non in forma di caratteri, ma bensì proprio come bit a basso livello, in modo da avere un file di piccole dimensioni!

qualcuno potrebbe darmi una mano??
please...

3 Risposte

  • Re: Scrivere una sequenza di bit su file

    one ha scritto:


    ciao a tutti...

    avrei bisogno di un aiutino, cioè dovrei scrivere su file una sequenza di bit contenuti in una stringa (es: "010010001") però non in forma di caratteri, ma bensì proprio come bit a basso livello, in modo da avere un file di piccole dimensioni!

    qualcuno potrebbe darmi una mano??
    please...
    ciao.

    magari mi sbagliero', ma trovo un po impossibile fare cio che intendi..... cioe', piu che altro lo vedo abbastanza "inconcepibile" come concetto stesso...

    se hai una sequenza di bit che vuoi memorizzarti staticamente (quindi ad esempio su file), ricorda sempre che 8 bit fanno un byte...

    leggasi,

    fai in modo di costruirti dei char il cui valore in binario sono esattamente gli 8 bit che vuoi salvare (ovviamente, ripetuto per gli N gruppi di bit sino a raggiungere il totale.)

    e a quel punto sul file scrivi il char corrispondente..
  • Re: Scrivere una sequenza di bit su file

    Mmm...è una buona idea!
    adesso devo solo capire come codificare gli eventuali bit dispari...

    grazie! mi sei stato molto d'aiuto!
  • Re: Scrivere una sequenza di bit su file

    Ciao,

    Non è molto complicato...

    imposti un risultato=0
    in un ciclo in cui leggi in tutto 8 chars:
    - prendi il char c
    - togli a c il carattere '0' (in modo che diventi un intero pari a 0 oppure 1)
    - assegni a risultato la or tra risultato e il numero
    - shifti il risultato a sinistra di un bit se non siamo arrivati all'ultimo carattere.

    Al termine degli otto caratteri nel risultato hai il valore dei primi otto bit nell'ordine consueto di lettura della stringa (da sinistra verso destra).

    Per illustrarti meglio facciamo un esempio:
    Supponiamo che la sottostringa interessata stringa sia "11011001" (in esadecimale sarebbe 0xD9) e vediamo come muta risultato negli 8 passi del ciclo:
    1)
    -Leggo '1', gli tolgo '0' ed ottengo il valore 1
    -risultato = risultato or 1 ed il valore binario di risultato è 00000001
    -shifto il risultato a sinistra di un bit, risultato diventa 00000010 (2)
    2)
    -Leggo '1', gli tolgo '0' ed ottengo il valore 1
    -risultato = risultato or 1 ed il valore binario di risultato è 00000011
    -shifto il risultato a sinistra di un bit, risultato diventa 00000110 (6)
    3)
    -Leggo '0', gli tolgo '0' ed ottengo il valore 0
    -risultato = risultato or 1 ed il valore binario di risultato è 00000110
    -shifto il risultato a sinistra di un bit, risultato diventa 00001100 (0x0C)
    4)
    -Leggo '1', gli tolgo '0' ed ottengo il valore 1
    -risultato = risultato or 1 ed il valore binario di risultato è 00001101
    -shifto il risultato a sinistra di un bit, risultato diventa 00011010 (0x1A)
    5)
    -Leggo '1', gli tolgo '0' ed ottengo il valore 1
    -risultato = risultato or 1 ed il valore binario di risultato è 00011011
    -shifto il risultato a sinistra di un bit, risultato diventa 00110110 (0x36)
    6)
    -Leggo '0', gli tolgo '0' ed ottengo il valore 0
    -risultato = risultato or 1 ed il valore binario di risultato è 00110110
    -shifto il risultato a sinistra di un bit, risultato diventa 01101100 (0x6C)
    7)
    -Leggo '0', gli tolgo '0' ed ottengo il valore 0
    -risultato = risultato or 1 ed il valore binario di risultato è 01101100
    -shifto il risultato a sinistra di un bit, risultato diventa 11011000 (0xD8)
    8 )
    -Leggo '1', gli tolgo '0' ed ottengo il valore 1
    -risultato = risultato or 1 ed il valore binario di risultato è 11011001 (0xD9)

    Se vuoi leggere la stringa da destra verso sinistra dovrai fare in maniera analoga, solo che dovrai far entrare i bit da destra invece che da sinistra (il che implica degli and e degli shift aggiuntivi).

    Ciaociao
Devi accedere o registrarti per scrivere nel forum
3 risposte