c++ - 如何在结构中使用字符串而不是 char 数组来读取二进制数据

标签 c++

我正在将二进制数据读取到一个结构中,它工作得很好。这是代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct TaqIdx {
  char symbol[10];
  int tdate;
  int begrec;
  int endrec;
}__attribute__((packed));

int main()
{
  ifstream fin("T201010A.IDX", ios::in | ios::binary);

  if(!fin) {
    cout << "Cannot open file."  << endl;
    return 1;
  }

  int cnt = 0;
  TaqIdx idx;

  while(fin.read((char *) &idx,sizeof(idx))) {
    if(!fin.good()) {
      cout << "A file error occurred." << endl;
      return 1;
    }

    idx.symbol[10] = '\0';
    cout << "(" << idx.symbol << ", " << idx.tdate << ", " 
         << idx.begrec << ", " << idx.endrec << ") "
         << cnt++ << endl;
  }

  fin.close();

  return 0;
}

前几行输出如下:

(A         , 20100864, 1, 35981) 0
(AA        , 20100864, 35982, 89091) 1
(AAPR      , 20100864, 89092, 89093) 2
(AACC      , 20100864, 89094, 89293) 3
(AADR      , 20100864, 89294, 89301) 4
(AAI       , 20100864, 89302, 99242) 5
(AAME      , 20100864, 99243, 99252) 6
(AAN       , 20100864, 99253, 102275) 7
(AANA      , 20100864, 102276, 102280) 8
(AAON      , 20100864, 102281, 102592) 9

我的问题是:是否可以将结构中的C风格字符数组替换为C++字符串?如果是这样,您能否举例说明我将如何做到这一点。非常感谢!

最佳答案

该代码似乎旨在将以特定二进制格式序列化的数据读取为 TaqIdx 格式。您当然可以修改阅读器以提供不同格式的数据(包括 std::strings),但您要么必须重写阅读器,要么在加载后进行转换。或者,您可以使用完全不同的数据格式,但这可能与您拥有的文件不兼容。

关于c++ - 如何在结构中使用字符串而不是 char 数组来读取二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588845/

相关文章:

c++ - 如何在 C++ 中获取目录中的文件列表?

c++ - 模板可能不是 ‘virtual’

C++ 嵌套作用域访问

c++ - 有没有办法有效地将 rapidjson 与 std::string 一起使用?

c++ - 类型转换和多态性

c++ - Project Euler #8,我不明白我哪里出错了

c++ - 在没有提升的情况下拆分 c++ 字符串,而不是在空格上

c++ - 如果我设置现有的 vector = vector<int>(num) 是否会发生内存泄漏?

c++ - 如何在 C++ 中解释 "const int *const & variable"

c++ - 将 lparam 作为指向类的指针发送,并在 WndProc() 中使用它