コンテンツのバイナリ出力ファイル作成された出力ストリーム

StackOverflow https://stackoverflow.com/questions/684931

  •  22-08-2019
  •  | 
  •  

質問

このコードを編集などを実行することを示しています。すでに印刷コンテンツ バイナリ形式です。ただし、出力が異なるから予想をはるか、すなわち、

  1. 出力ファイルサイズは小さくな方で作成したstd::cout.
  2. のコンテンツの出力ファイルは圧縮されるまでにエディタ、 するとともに見ることができます。

それなのになぜ以下のコードはないと思っているか。したいので修正していること、そしてそ?

#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

void WriteStr2BinFh(const string& St, ostream &fn)
{
   fn.write(St.c_str(), St.length());
}



int main  ( int arg_count, char *arg_vec[] ) {

    vector <string> Tags;
   // In principle we have millions of such tags
   // Hence we need to compress it into binary output.
    Tags.push_back("0000000000");
    Tags.push_back("0000101110");
    Tags.push_back("0133030122");
    Tags.push_back("0133132033");
    Tags.push_back("1002013320");
    Tags.push_back("1111111111");
    Tags.push_back("1301013133");
    Tags.push_back("3010112111");
    Tags.push_back("3203012113");
    Tags.push_back("3203012212");

    //prn_vec<string>(Tags, "\t");
    //cout << endl;

    ofstream outfile;
    outfile.open("MyOut.bin", ios::binary|ios::out);

    for (unsigned i=0; i <Tags.size(); i++) {
         WriteStr2BinFh(Tags[i]+"\t",outfile);
    }

    outfile.close();

    return 0;
}
役に立ちましたか?

解決

あなたはバイナリ形式(テキストではなく)にデータを書き込む必要があります

void WriteStr2BinFh(const string& St, ostream &fn)
{
char *p = 0;
long l = strtol(St.c_str(), &p);
fn << l;
}
あなたはおそらくn個にあなたの文字列を分割し、n個のlong型として保存する必要がありますので、

あなたは、長い間のようなタイプは、いくつかの最大値を持っていることを認識する必要があります。

他のヒント

  

出力ファイルのサイズは非常にする必要があります   で作成されたものより小さな   std :: coutの

あなたが何を意味するか "のstd :: coutを使用して作成"?
あなたはint型ではなく、文字列が保存されます場合は少し小さくなる可能性があります。

  

出力ファイルの内容は次のようになります   圧縮され、それゆえ我々はそれを開いたとき   エディタは、我々は見ることはできないはず   コンテンツます。

いいえ、それは圧縮すべきではありません。あなたは、ライブラリ HTTP Boost.Iostreamsを使用することができます:// WWW .boost.org / DOC / libsに/ 1_38_0 / libsに/入出力ストリーム/ DOC / index.htmlをzip形式のファイルを作成するためにを。

理解を容易にするために、あなたは、バイナリファイルがメモリを見ますときに、デバッガで見ることができる情報が含まれていることを考えることができます。

またbinnary形式で出力するために、あなたは(std::vector < int >の場合には、それは違いがあります)すべてのベクトルの項目の書込みストリーム・メソッドを使用する必要があります。

(出力\ tのためにあなたは<<演算子を使用することができます)

のコンテンツの出力ファイルを圧縮する時までに編集するとともに見ることができます。

私のIOStream図書館にない場合、圧縮への出力に出力します。クなどの指摘を使用してみてください他の図書館におトが圧縮されます。

出力ファイルサイズは小さくな方で作成したstd::cout.

その結果、前引数は出力として扱われるバイトのストリーム(うASCIIで表される文字)で記述"としては、"ファイル、および、そのため、サイズ変更はありません。

みるも 文書より良い解説 のバイナリファイルです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top