2017-11-05 4 views
0

std :: basic_stringstreamとの間でバイナリデータを読み書きするには、何が必要ですか(いくつかの方法はオーバーライドされますか? 私は、次のコードをしようとしていますが、それは動作しません、私が想定して:ストリングストリームとバイナリデータ

std::basic_stringstream<uint64_t> s; 
uint64_t a = 9; 
s << a; 
uint64_t b; 
s >> b; 
std::cout << b << std::endl; 

が、私は(GCCで構築された)印刷された「0」を取得。

+0

組み込みの 'のstd :: char_traits 'の専門はありません。 'std :: basic_stringstream 'をインスタンス化するまで、インスタンス化することはできません。今、あなたは何を達成しようとしていますか?あなたのコードは私にはあまり意味がありません。プレーンなバニラ 'std :: stringstream'を使うのであれば' '9'(http://rextester.com/BDPZD89619)を印刷しますが、そこには"バイナリデータ "はありません。 。 –

+0

しかし、afaik 'basic_stringstream'は彼らが何をしているのか知っている人のためのものです。あなたは実際に何を達成したいのですか?私は 'basic_stringstream'が正しいツールではないことをほとんど確信しています – user463035818

+0

64ビット10進数を9の" 1001 "のようなテキストバイナリ表現に変換しようとしていますか? –

答えて

0

あなたが読み取り/あなたが<<かを使用することはできませんバイナリデータを書き込みたい場合は>>あなたはstd::stringstream::readstd::stringstream::write機能を使用する必要があります。

またcharは他のタイプに安全にエイリアスできるので、<char>特殊化を使用する必要があります。

だから、あなたはこのようにそれを行うことができ:

std::stringstream ss; 

std::uint64_t n1 = 1234567890; 

ss.write((char const*) &n1, sizeof(n1)); // sizeof(n1) gives the number of char needed 

std::uint64_t n2; 

ss.read((char*) &n2, sizeof(n2)); 

std::cout << n2 << '\n'; 

が出力:

1234567890 
関連する問題