如何读取c+中的二进制数据+;? 我需要读写C++中的二进制数据。我使用的是打开文件,使用 STD::IO::二进制< /Cult>标志,然后使用 Read < /C> >和写,而不是流式传输。接线员

如何读取c+中的二进制数据+;? 我需要读写C++中的二进制数据。我使用的是打开文件,使用 STD::IO::二进制< /Cult>标志,然后使用 Read < /C> >和写,而不是流式传输。接线员,c++,file-io,C++,File Io,这里有一些例子: 这里有一个程序可以做到这一点: #include <iostream> #include <fstream> int main(int argc, const char *argv[]) { if (argc < 2) { ::std::cerr << "Usage: " << argv[0] << "<filename>\n"; return 1; }

这里有一些例子:


这里有一个程序可以做到这一点:

#include <iostream>
#include <fstream>

int main(int argc, const char *argv[])
{
   if (argc < 2) {
      ::std::cerr << "Usage: " << argv[0] << "<filename>\n";
      return 1;
   }
   ::std::ifstream in(argv[1], ::std::ios::binary);
   while (in) {
      char c;
      in.get(c);
      if (in) {
         ::std::cout << "Read a " << int(c) << "\n";
      }
   }
   return 0;
}
这是一个基本示例(没有任何错误检查!):

//所需的STL
#包括
使用名称空间std;
//只是一个课堂例子
类数据
{
INTA;
双b;
};
//创建一些变量作为示例
数据x;
数据*y=新数据[10];
//在输入/输出中打开文件
fstream myFile(“data.bin”,ios::in | ios::out | ios::binary);
//在二进制文件的开头写入
myFile.seekp(0);
write((char*)&x,sizeof(Data));
...
//假设我们希望从一开始就读取10个数据
//二进制文件的格式:
myFile.seekg(0);
myFile.read((char*)y,sizeof(Data)*10);
//记住关闭文件
close();

请显示您的代码。您是否在开放模式字段中设置了
std::ifstream::binary
?请显示一段代码、您期望的输出和获得的输出。请参阅我在回答中给出的方法,该方法有效,但性能相对较差。我建议阅读另一个答案给出的参考,因为提到的函数实际上执行得更快,尽管它们在概念上使用起来稍微复杂一些。@mehdi,他给了你文档和示例。您还想要什么?请看第一个链接中的示例。它将打开一个文件,读取内容并将内容放入一个字符缓冲区。缓冲区本质上将被视为字节数组。到底什么是你需要更多解释的?如何处理缓冲区并从中获取值?偏执名称空间解析!:-)@Kerrek SB:为什么,是的,请看大Grin这是可行的,但如果文件很大,则效率非常低。为了获得更好的性能,请使用Stuard-Golodetz方法。为了获得更好的性能,请使用std::streambuf。@user763305:是的,它的性能并不那么好。但OP似乎不想有细微差别。另一个答案只有文档链接,因此没有方法,只有一个关于如何操作的提示。:-)没有符合标准的编译器将生成此文件<代码>标准:
fstream
位于
(否
.h
)中。应用建议。。抱歉耽搁了!为什么@johnsyweb没有编辑我的代码?
$ echo -ne '\x9\xd\x20\x9\xd\x20\n' >binfile
$ ./readbin binfile 
Read a 9
Read a 13
Read a 32
Read a 9
Read a 13
Read a 32
Read a 10
// Required STL
#include <fstream>
using namespace std;

// Just a class example
class Data
{
   int    a;
   double b;
};

// Create some variables as examples
Data x;
Data *y = new Data[10];

// Open the file in input/output
fstream myFile( "data.bin", ios::in | ios::out | ios::binary );

// Write at the beginning of the binary file
myFile.seekp(0);
myFile.write( (char*)&x, sizeof (Data) );

...

// Assume that we want read 10 Data since the beginning
// of the binary file:
myFile.seekg( 0 );
myFile.read( (char*)y, sizeof (Data) * 10 );

// Remember to close the file
myFile.close( );