2013-02-22 8 views
6

長い整数を読み込む方法が不明です。私はそれがintをC++でバイナリファイルに読み書きする

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

どのように私は複数に格納されている情報を使用して保存されたのと同じ番号を表示することができますされているファイルに値を格納し、それらをリードバックしたい

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

を言うなら文字配列のバイト数?

+0

もっと具体的になることができますか? –

+0

バイナリファイルに格納された整数値[4バイト]をどのように読み取るかを知りたいと思います。 – user2097891

+4

あなたのコードはすでにそれをしていませんか? –

答えて

11

o.writeは文字を書きません。バイトを書き込みます(ios :: binaryでフラグが設定されている場合)。 charは長さが1バイトであるため、charポインタが使用されます。

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

(char*) ao.writeを書くべきかのアドレスです。その後、ファイルにsizeof(a)バイトを書き込みます。文字は格納されず、バイトだけが格納されます。

ファイルを16進エディタで開くと、aがint i = 10の場合: 0A 00 00 00(4バイト、x64)です。

読書はアナログです。

#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

こんにちは、私はこれに問題があります。バイナリでファイルオブジェクトにフラグを立てないとどうなりますか? – Darktega

0

は申し訳ありませんが、私はあなたの質問を見てとても時間がかかった:ここ

は実施例です。

私はバイナリの違いはバイナリがそのままファイルを読み書きすると思います。しかし、非バイナリ(すなわちテキスト)モードでは、行末 '\ n'をキャリッジリターン '\ r'で修正します。修正は '\ n'と '\ r'または '\ n \ r'または '\ r \ n'の間を行き来するか、 '\ n'のままにしておきます。それは、対象のオペレーティングシステムがMac、Windows、Unixなどであるかどうかによって異なります。

整数を読み書きすると、整数の読み込みと書き込みが正しく行われているように見えます。しかし、整数の一部のバイトが '\ r'や '\ n'のように見える場合、整数はファイルから正しく読み戻されません。

バイナリは、intの読み込みが常に正しいことを保証します。しかし、テキストモードでWindowsのメモ帳などのテキストエディタで読み込むファイルをフォーマットする必要があります。

関連する問題