【问题标题】:Trouble trying to read a short int from a binary file (C++)尝试从二进制文件中读取短整数时遇到问题 (C++)
【发布时间】:2014-11-19 06:23:09
【问题描述】:

我有一个二进制文件,其中第一行包含我存储到变量中的元数据(例如行 343 列 770 ...)。在此之后,文件的其余部分包含与我还想存储的各种高度相关的短整数(在这段代码中,我只是在测试是否可以获得单个值)。我的代码:

  int map[800][800];
  string a;
  int numrows, numcolumns, bytespp, secondspp, lls, tls, min, max, special;
  ifstream infile;
  infile.open("usaW70N25D5.dat", ios::binary | ios::in);
  infile >>a >> numrows >> a>>numcolumns >> a>> bytespp >>a >> secondspp >>a >> lls >> a>> tls >> a>> min >>a >> max >>a >> special;
  int row = 0; max = 0;
  cout << numrows << " " << numcolumns << " " << bytespp << " " << secondspp << " " << lls << " " << tls << " " << min << " " << max << " " << special << endl;

  short int val = 0;
  infile.read((char*)&val,sizeof(infile)); 
  cout << val<< endl;

我得到的错误是:

mapproject.exe 中 0x52ec6e9f (msvcp100d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xfe0cfe0c。

我在尝试读取文件时哪里出错了?我想也许我必须将位置移动一个并尝试:

  int spot = infile.tellg(); spot+=1;
  infile.seekg(spot);

但这并没有帮助。

【问题讨论】:

  • iostreams 不适用于二进制文件。 ios::binary 实际上并不执行二进制 I/O,它所影响的只是换行符转换。所有其他字符编码和语言环境层仍然存在; iostreams 不能在没有方面的情况下运行。而“未格式化”的 I/O 函数(例如 read)也不会绕过这些层——它们位于 filebuf 中,甚至低于未格式化的 I/O。

标签: visual-c++ fstream binaryfiles


【解决方案1】:

读取&gt;&gt; 的流不读取两个二进制字节。它读取一串字符。

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多