2011-02-11 12 views
2

このコードスニペットがオブジェクト/イメージをファイルに保存する場合、実際に画像のバイナリデータストリームcoutに変更する必要があるのは何ですか?ありがとう!coutバイナリデータ

if (frame && frame->Contains(ID3FN_DATA)) 
    { 
    cout << "*** extracting picture to file \"" << argv[2] << "\"..."; 
    frame->Field(ID3FN_DATA).ToFile(argv[2]); 
    cout << "done" << endl; 
    } 
+2

あなたはどのライブラリを使用していますか?その答えは、C++仕様の一部ではないので、そのライブラリに固有のものになります。 – templatetypedef

+0

@templatetypedef、これはID3libから来たもので、私はちょうどこれの代わりにしたい: 'frame-> Field(ID3FN_DATA).ToFile(argv [2]);' 'cout'に' frame-> Field(ID3FN_DATA) 'を送る – cube

+2

You少なくとも移植可能ではありません: 'std :: cout'はテキストストリームであり、[バイナリストリームとして再オープンする移植可能な方法はありません。](http://www.parashift.com/c++-faq- lite/input-output.html#faq-15.13)まさにあなたは何をしようとしていますか?通常、大量のバイナリデータをコンソールにダンプするのは大変意味がありません。 –

答えて

2

は、私は特にこのライブラリに慣れていないんだけど、ウェブサイト上のドキュメントは、あなたがID3_Fieldオブジェクトを持っていたら、それは、あなたがそのID3_Field::BinSize()を使用して、生のバイナリサイズとID3_Field::GetRawBinary()からの生のバイトを得ることができることを示唆しています。あなたはこれらの2つのパラメータを持っていたら、これが仕事に行くされている場合、私はこのライブラリを使用していない、しかしで決してきたので、私は見当がつかない

myOStream.write((char *)field->GetRawBinary(), field->BinSize()); 

を呼び出すことにより、coutを含む、任意のostreamにバイナリデータを書き込むことができます少なくとも直感的にはこれは意味をなさない。

希望すると便利です。

+0

これはうまくいきませんが、 'std :: cout'はテキストストリームなので、' std :: ostream :: write'は改行変換を行います。 –

+0

@James McNellis-出力が 'cout'以外のストリームの場合はどうなりますか?それはその後動作するのだろうか?それがうまくいかない場合は、クロスプラットフォームでこれを行うための希望はありますか? – templatetypedef

+0

バイナリストリームの場合は動作しますが、元の投稿へのコメントに書いたように、 'std :: cout'をバイナリストリームとして再オープンする方法はありません。 –