Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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
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/

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:

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. }



PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote