0

ファイルから unsigned char を読み取り、さまざまな実行方法を検索したいと考えています。しかし、それらが機能する理由と機能しない理由はわかりません。

1. ifstream input(ios::in | ios::binary) //seems to not work, but why?

ios::binary変換を防ぐはずの を設定しました。

2. unsigned char buffer[BUFFER_SIZE];

myfile.read((unsigned char *) buffer, BUFFER_SIZE);//error!fail

myfile.read((char *) buffer, BUFFER_SIZE);//work, the data type is unsigned char

に変換する必要があるのはなぜchar*ですか? 配列に格納されたデータは char に変換されませんunsigned charか? 変換中に何をしますか?

3. vector//動作しますが、何をしたのかわかりません。

4

2 に答える 2

1

read関数は、「char*」のプロトタイプを宣言します。これは、ある著者が時間の霧の中でしたことです。「変換」が行われるという意味ではありません。いずれの場合も、char*からunsignedchar*への「変換」はありません。どちらもバイトへのポインタであり、I/Oクラスの変換セマンティクスは他の要因によって制御されます。

于 2012-12-16T19:48:33.257 に答える
1

最初の部分では、コンストラクターはファイル名も想定しています。例えば、

ifstream input("myfile.dat", ios::in | ios::binary);

ios::inのデフォルトであるため、省略できると思いますifstream

2 番目の部分でistream::readは、char*ポインター (または同等の型) が必要です。データを読み取った後、要素を にキャストできますunsigned char*

于 2012-12-16T19:55:37.423 に答える