2012-04-21 2 views
0

私は代入に取り組んでいますが、整数の出力とバイナリファイルへの二倍になっています。整数と二倍をバイナリファイルに出力する方法

出力ストリームにバイナリフラグを使用するとともにwrite()関数を使用する必要があることがわかっていますが、write()では出力するには文字配列が必要です。私は通常の文字列を出力しているときに、(char *)を使用して型キャストするか、.c_str()関数を使用することができますが、倍数と整数には問題があります。

整数と2倍をバイナリに出力するにはどうすればよいですか?

+0

人間が読めるようにする必要がありますか? –

+0

整数と2倍をバイナリファイルに出力するだけです。 –

答えて

1

変数を参照解除し、ポインタをchar*にキャストしてから、sizeof()を使用して、書き込むバイト数を決定することができます。例えば:あなたが移植可能にするファイルが必要な場合も

int var; 
char* varAsCharP = (char*)&var; 
size_t bytesToWrite = sizeof(int); 

は、あなたが(例えば(保存時)、各種hton機能を使用して、最初のバイトオーダーをネットワークに変数を変換したい、とntoh機能かもしれません読んで戻るとき) - それは整数のためだけにすぎませんが。

+2

書くときにタイプのサイズを渡すことを忘れないでください。バイナリファイルの内容は人間が読める必要はありません。 –

+0

うん、ちょうどそれを追加しました。 – sonicwave

1

あなたはここで説明STDLIB方法を使用することができます。 http://msdn.microsoft.com/en-us/library/0heszx3w%28v=vs.71%29.aspx

またはあなたが使用することができますboost::lexical_cast

またはあなただけのバイトをしたい場合、あなたはstringstream

がお好き

を取る使用することができます表現すれば、そうすることができます:

int myVar = 10; 
char * dest = new char[sizeof(myVar)]; 
memcpy(&dest, &myVar, sizeof(myVar)); 
+0

私はOPが文字列表現ではなく、値のバイト表現を書こうと思っています。その場合の –

+0

は単純なmemcpyを行うことができます。 'char * dest = new char [sizeof(src)]; memcpy(&dest、src、sizeof(src)); ' – EdChum

+0

Typo:' memcpy'の '&src'です。はい、そうすることができます。 –

関連する問題