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++ - Leggere file binario
Forum - C/C++ - Leggere file binario

Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 15:04
Giovedì, 29/04/2010
Salve,
come faccio a scrivere e leggere file binari? (in c++)
Sto creando un programma per la compressione dei file, e quindi avrei bisogno di leggere tutto il file composto da 0 e 1 e poi modificarli per ristamparli in binario.

esempio:
input.txt
27

vorrei salvare in una variabile string o vettore di bool 11011...

Come faccio?


Ultima modifica effettuata da XBarboX il 29/04/2010 alle 15:04


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
gio97 (Ex-Member)
Guru


Messaggi: 715
Iscritto: 25/04/2009

Segnala al moderatore
Postato alle 15:11
Giovedì, 29/04/2010
Quando crei un nuovo fstream lo apri in modalità binaria(ios::bin). Quindi per leggere puoi usare read(char *datiLetti, int nByte) e poi per scrivere write(char *datiDaScrivere, int nByte). Comunque http://www.cplusplus.com/reference/iostream/fstream/


"Ditemi, sapete chi è... il ciaffo?"
"Questo essere trae origine da un arcaico lamer.
Tanto tempo fa, in una chat oscena oscena, il lamer f1192 si lamentava di non poter inserire le graffe, perché non aveva... IL CIAFFO"(L'uomo che sussurrava ai ciaffi)
PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 17:42
Giovedì, 29/04/2010
gentilissimo :k:


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 20:55
Giovedì, 29/04/2010
Ho provato ma non funziona... mi da sempre come dato letto w e non il codice binario... chiedo troppo se mi mostri un esempio? Ho trovato questo sulla rete ma non mi da il numero che legge in binario
Codice sorgente - presumibilmente C++

  1. // read a file into memory
  2. #include <iostream>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. int main () {
  7.   int length;
  8.   char * buffer;
  9.  
  10.   ifstream is;
  11.   is.open ("file.txt", ios::binary );
  12.  
  13.   // get length of file:
  14.   is.seekg (0, ios::end);
  15.   length = is.tellg();
  16.   is.seekg (0, ios::beg);
  17.  
  18.   // allocate memory:
  19.   buffer = new char [length];
  20.  
  21.   // read data as a block:
  22.   is.read (buffer,length);
  23.   is.close();
  24.  
  25.   cout.write (buffer,length);
  26.  
  27.   delete[] buffer;
  28.   return 0;
  29. }




The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:55
Giovedì, 29/04/2010
Il programma funziona correttamente!

Viene ricihesta la lettura di un file di caratteri.

Se desideri un' altro formato, devi dichiararlo.
Faccio un' esempio per chiarire:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. struct dato
  6. {
  7.     bool verifica;
  8. };
  9.  
  10. int main () {
  11.   int length=0, NumeroDiRecord=0;
  12.   dato *buffer;
  13.  
  14.   ifstream is("G:\\Nuova cartella\\file\\lettura\\file.txt", ios::binary | ios::in );
  15.   // introduco le doppie \\ per evitare conflitti con \N
  16.   if (!is) \\ controllo l' apertura corretta del file.
  17.  {
  18.      cout<<"\nFile non aperto\n";
  19.      fflush(stdin);
  20.      getchar();
  21.      return 0;
  22.  }
  23.    // get length of file:
  24.    is.seekg (0, ios::end);
  25.    length = is.tellg();
  26.    NumeroDiRecord=(int) length/ sizeof(dato);
  27.    is.seekg (0, ios::beg);
  28.  
  29.    // allocate memory:
  30.    buffer = new dato [NumeroDiRecord];
  31.  
  32.    // read data as a block:
  33.    is.read ((char *) buffer, length); // cast a char necessario
  34.    is.close();
  35.    delete[] buffer;
  36.  
  37.  return 0;
  38. }


Ultima modifica effettuata da Poggi Marco il 29/04/2010 alle 21:58


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:45
Giovedì, 29/04/2010
Testo quotato

... non mi da il numero che legge in binario ...



Esprimere un valore in binario a video è cosa diversa rispetto a leggere un file in modalità binaria.

Se vuoi visualizzare un valore in binario, lo devi convertire con un codice di conversione dal decimale al binario ...

A parte questo, non è affatto necessario convertire in binario un numero per fare quello che dici ... puoi operare tranquillamente in decimale.

Ultima modifica effettuata da nessuno il 29/04/2010 alle 23:50


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote