バイナリ ファイルを符号なし文字のベクトルに読み取るタスクを実行すると、いくつかのオプションが表示されます。
オプション 1: char への明示的なキャスト*
このアプローチは、char* への明示的なキャストを使用してデータをベクトルに読み取ります:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { // ... file.read((char*) &fileData[0], fileSize); return fileData; }</code>
機能しますが、明示的なキャストが必要ですが、これが不安の原因になる可能性があります。
オプション 2: char を使用した istreambuf_iterator
テンプレート引数として char を使用して std::istreambuf_iterator を使用すると、簡素化されます。コード:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { // ... return std::vector<BYTE>(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()); }</code>
ただし、ベクトルに unsigned char が含まれていても、イテレータでは引き続き char が使用されます。
オプション 3: BYTE を使用した Basic_ifstream
このオプションは、タイプとして BYTE を使用する入力ファイル ストリームを明示的に宣言し、意図を明確にします。
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { // ... std::basic_ifstream<BYTE> file(filename, std::ios::binary); return std::vector<BYTE>(std::istreambuf_iterator<BYTE>(file), std::istreambuf_iterator<BYTE>()); }</code>
basic_ifstream の適合性は、特定の使用例によって異なります。
istreambuf_iterator: シンプルさと効率
std::istreambuf_iterator はシンプルさを提供しますが、バイナリ データにとって最も効率的なオプションではない可能性があります。 >> を使用します。データを解釈するため、不要なオーバーヘッドが発生する可能性があります。 std::copy などの代替アプローチを検討してください。
その他の考慮事項
以上がバイナリ ファイルを符号なし文字のベクトルに効果的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。