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

您不能将二进制数据放在字符串中。请记住,字符串由'\0'与值零相同的特殊字符终止。如果二进制数据包含零,则与字符串的结尾相同。

您可能应该使用 astd::vector<int8_t>来存储二进制数据。

于 2013-02-15T06:34:26.877 回答
0

问题在这里:

std::string ret = buff;

据此,

“复制s 指向的以空字符结尾的字符序列(C 字符串)。”

因此,一旦0x00到达字符,它就会停止。

如果您要返回buff(这是一种危险的做法)或让您的函数将 char 数组作为输入参数并仅将其存储在那里,它应该可以工作。您可能想要返回一个长度指示符,否则 C++ 将不知道数组有多大。

于 2013-02-15T06:42:15.093 回答