2011-12-29 7 views
5

は、これまでのところ私ははifstreamからunsigned char型を読み込むためのコードがありますか?私はまた、ofstreamのにunsigned char型書き込もうとしました:C++でfstreamを使用しているファイルに対して、unsigned charを読み書きするにはどうすればよいですか?これは正しいです</p> <pre><code>ifstream in; unsigned char temp; in.open ("RANDOMFILE", ios::in | ios::binary); in.read (&temp, 1); in.close(); </code></pre> <p>:

ofstream out; 
unsigned char temp; 

out.open ("RANDOMFILE", ios::out | ios::binary); 
out.write (&static_cast<char>(temp), 1); 
out.close(); 

をしかし、私は書き込みのために、次のエラーを取得:読書のため

error C2102: '&' requires l-value 

そして、このエラー:

error C2664: 'std::basic_istream<_Elem,_Traits>::read' : cannot convert parameter 1 from 'unsigned char *' to 'char *' 

それは希望誰かが私のコードで何が問題なのか、あるいはfstreamからどのようにしてunsigned charsを読み書きできるのか教えてもらえれば幸いです。

答えて

8

書き込みエラーは、作成した一時アドレスがstatic_castであることを示しています。

の代わりに:

// Make a new char with the same value as temp 
out.write (&static_cast<char>(temp), 1); 

一時にすでに同じデータを使用します。

// Use temp directly, interpreting it as a char 
out.write (reinterpret_cast<char*>(&temp), 1); 

あなたはcharとしてデータを解釈するようにコンパイラに指示した場合、読み取りエラーも固定されます:

in.read (reinterpret_cast<char*>(&temp), 1); 
2

read関数alw aysは引数としてバイトをとります。便宜上、値はcharと表されます。これらのバイトにポインタをキャストすることができますので、

in.read (reinterpret_cast<char*>(&temp), 1); 

は1バイトだけ正確に読み取ります。メモリはメモリであり、C++のタイプは単なるメモリの解釈であることを覚えておいてください。生のバイトを生のメモリに読み込むときは、最初に読み込んでから適切な型にキャストする必要があります(readのように)。

関連する問題