10

長整数の読み取りがどのように機能するかはわかりません。私が言うなら

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

値をファイルに保存し、そのまま読み戻したい

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

複数バイトの文字配列に格納されている情報を使用して、格納されているのと同じ数値を表示するにはどうすればよいですか?

4

2 に答える 2

11

o.write文字を書き込まず、バイトを書き込みます (ios::binary でフラグが立てられている場合)。char の長さは 1 バイトであるため、char-pointer が使用されます。

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

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

int i = 10Hex-Editor でファイルを開くと、a が: 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;
}
于 2013-02-22T07:00:20.700 に答える
-4

申し訳ありませんが、あなたの質問を見るのに時間がかかりました。

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

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

Binary は、int の読み戻しが常に正しいことを保証します。しかし、Windows のメモ帳などのテキスト エディタで読み取れるようにファイルをフォーマットするには、テキスト モードが必要です。

于 2016-09-27T22:28:24.840 に答える