2013-02-22 4 views
6

Nie jestem pewien, jak działają długie liczby całkowite. Jeśli powiemCzytanie i pisanie int do pliku binarnego w języku C++

long int a[1]={666666} 
ofstream o("ex",ios::binary); 
o.write((char*)a,sizeof(a)); 

do przechowywania wartości do pliku i chcą czytać je z powrotem, ponieważ jest

long int stor[1]; 
ifstream i("ex",ios::binary); 
i.read((char*)stor,sizeof(stor)); 

jak będę w stanie wyświetlać ten sam numer jak zapisane za pomocą informacji przechowywanych w wielu bajty tablicy znaków?

+0

Czy możesz być bardziej konkretny? –

+0

Chciałbym dowiedzieć się, jak odczytać wartość całkowitą [4 bajty] przechowywane w pliku binarnym. – user2097891

+4

Czy Twój kod już tego nie robi? –

Odpowiedz

11

o.write nie zapisuje znaku, zapisuje bajty (jeśli oznaczone flagą ios :: binary). Wskaźnik char jest używany, ponieważ znak ma długość 1 bajta.

o.write((char*)a,sizeof(a)); 

(char*) a jest adres co o.write powinien napisać. Następnie zapisujebajtów do pliku. Nie ma zapisanych znaków, tylko bajty.

Jeśli otworzysz plik w edytorze szesnastkowym, zobaczysz coś takiego, jeśli jest to int i = 10: 0A 00 00 00 (4 bajty na x64).

Czytanie jest analogowe.

Oto przykład roboczych:

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 


int main (int argc, char* argv[]){ 
    const char* FILENAM = "a.txt"; 
    int toStore = 10; 
    ofstream o(FILENAM,ios::binary); 

    o.write((char*)&toStore,sizeof(toStore)); 
    o.close(); 

    int toRestore=0; 
    ifstream i(FILENAM,ios::binary); 
    i.read((char*)&toRestore,sizeof(toRestore)); 

    cout << toRestore << endl; 


    return 0; 
} 
+1

Witam, mam z tym problem. Co stanie się, jeśli nie zaznaczysz obiektu pliku binarnie? – Darktega

0

Przepraszam, że trwało to tak długo, aby zobaczyć swoje pytanie.

Myślę, że różnica między binarnymi jest binarna będzie czytać i zapisywać plik, jak jest. Ale tryb inny niż binarny (tzn. Tekstowy) naprawi koniec linii '\ n' za pomocą powrotu karetki '\ r'. Poprawka zmieni się z powrotem pomiędzy: \ n \ i \ r \ lub \ n \ r \ lub \ r \ n lub pozostawi jako \ n. To, co robi, zależy od tego, czy docelowy system operacyjny to Mac, Windows, Unix itp.

Myślę, że jeśli czytasz i piszesz liczbę całkowitą, to odczytasz i zapiszesz całkowitą liczbę całkowitą dobrze i będzie wyglądać poprawnie. Ale jeśli jakiś bajt (y) liczby całkowitej wygląda jak "\ r" i "\ n", wtedy liczba całkowita nie będzie poprawnie odczytana z pliku.

Binarny zapewnia, że ​​odczytywanie wartości int będzie zawsze poprawne. Ale chcesz, aby tryb tekstowy sformatował plik do odczytania w edytorze tekstów, takim jak Notatnik systemu Windows.