繁体   English   中英

读取二进制文件C ++

[英]Reading binary file C++

请帮我。 我无法读取二进制文件。 该文件的长度为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; 
}

文件样本

需要任何帮助,谢谢!

只要您知道返回的std::string包含二进制数据,请替换

std::string ret=buff;

std::string ret(buff, size);

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

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

问题在这里:

std::string ret = buff;

根据 ,它:

“复制由s指向的以空终止的字符序列(C字符串)。”

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM