0

私を助けてください。バイナリファイルを読み込めません。ファイルの長さは 198944 ですが、私のコードは 374 を読み取ります。fread、ifstream、WinAPI ReadFile を使用しようとしました。これは、ファイルを読み取る関数です。

std::string ReadThisFile(std::string aPath) {
   FILE *inputstream = fopen(aPath.c_str(),"rb");
   long size;
   size_t result; 
   fseek(inputstream,0,SEEK_END); 
   size = ftell(inputstream); 
   rewind(inputstream); 
   char *buff = new char [size];
   result = fread (buff,1,size,inputstream); 
   std::string ret=buff; 
   fclose(inputstream); 
   delete[]buff; 
   return ret; 
}

ファイルのサンプル

助けが必要です、ありがとう!

4

3 に答える 3

1

std::string返される にバイナリ データが含まれていることを認識している限り、

std::string ret=buff;

std::string ret(buff, size);
于 2013-02-15T06:47:03.823 に答える
0

問題はここにあります:

std::string ret = buff;

これによると、それは:

「sが指すヌル終了文字シーケンス(C文字列)をコピーします。」

0x00そのため、キャラクターに到達するとすぐに停止します。

戻る場合buff(これは危険な方法です)、または関数にchar配列を入力パラメーターとして受け取り、そこに格納するだけの場合は、機能するはずです。また、長さインジケーターを返すこともできます。そうしないと、C++は配列の大きさを認識できません。

于 2013-02-15T06:42:15.093 に答える
0

バイナリ データを文字列に入れることはできません。文字列は'\0'、値ゼロと同じ特殊文字で終了することに注意してください。バイナリ データにゼロが含まれている場合、それは文字列の末尾と同じです。

std::vector<int8_t>バイナリ データを格納するには、おそらく a を使用する必要があります。

于 2013-02-15T06:34:26.877 に答える