在二进制格式的xml文件中查找关键字

时间:2016-04-29 15:21:09

标签: c++ xml binaryfiles

我有一个二进制格式的xml文件。我想用c ++代码提取这个文件中某些行中包含的一些关键字。让我们说我想找到以下关键字<GK-VECTORS>,我知道该关键字存在于文件中。这是我的c ++代码:

#include <fstream>
#include <iostream>

using namespace std;    

int main(){
  int size(8);
  ifstream gfile("gkvectors.dat", ios::binary | ios::in);
  string keyword = "<GK-VECTORS>";
  string line;
  while( gfile.good() ){
    getline(gfile,line);
    bool found = line.find(keyword);
    if( found != string::npos ){
      cout << line << '\n';
      break;
    }
  }
  return 0;
}

我从执行这些文件得到的输出不是(人类)可读的:

以下是(未格式化的)xml文件的内部结构:

^D^@^@^@^E^Z^@^@^D^@^@^@^^^@^@^@\200^Z^@^@
<?iotk version="1.2.0"?>
^^^@^@^@^D^@^@^@^E^]^@^@^D^@^@^@!^@^@^@\200^]^@^@
<?iotk file_version="1.0"?>
!^@^@^@^D^@^@^@^E^U^@^@^D^@^@^@^Y^@^@^@\200^U^@^@
<?iotk binary="T"?>
^Y^@^@^@^D^@^@^@^E^X^@^@^D^@^@^@^\^@^@^@\200^X^@^@
<?iotk qe_syntax="F"?>
^\^@^@^@^D^@^@^@^A^N^@^@^D^@^@^@^R^@^@^@\200^N^@^@
<GK-VECTORS>
^R^@^@^@^D^@^@^@^A;^@^@^D^@^@^@?^@^@^@\200;^@^@
  <NUMBER_OF_GK-VECTORS type="integer" size="1" kind="4">
?^@^@^@^H^@^@^@^@^@^@^@\255^C^@^@^H^@^@^@^D^@^@^@^B^[^@^@^D^@^@^@^_^@^@^@\200^[^@^@
  </NUMBER_OF_GK-VECTORS>
^_^@^@^@^D^@^@^@^A?^@^@^D^@^@^@C^@^@^@\200?^@^@
  <MAX_NUMBER_OF_GK-VECTORS type="integer" size="1" kind="4">
C^@^@^@^H^@^@^@^@^@^@^@\326^C^@^@^H^@^@^@^D^@^@^@^B^_^@^@^D^@^@^@#^@^@^@\200^_^@^@
  </MAX_NUMBER_OF_GK-VECTORS>
#^@^@^@^D^@^@^@^A1^@^@^D^@^@^@5^@^@^@\2001^@^@
  <GAMMA_ONLY type="logical" size="1" kind="4">
5^@^@^@^H^@^@^@^@^@^@^@^@^@^@^@^H^@^@^@^D^@^@^@^B^Q^@^@^D^@^@^@^U^@^@^@\200^Q^@^@
  </GAMMA_ONLY>
^U^@^@^@^D^@^@^@^AC^@^@^D^@^@^@G^@^@^@\200C^@^@
  <K-POINT_COORDS type="real" size="3" kind="8" UNITS="2 pi / a">
G^@^@^@^\^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^\^@^@^@^D^@^@^@^B^U^@^@^D^@^@^@^Y^@^@^@\200^U^@^@
  </K-POINT_COORDS>
^Y^@^@^@^D^@^@^@^A.^@^@^D^@^@^@2^@^@^@\200.^@^@
  <INDEX type="integer" size="941" kind="4">

有人可以帮助我解决这个问题,以便我可以获得可读的输出吗?

1 个答案:

答案 0 :(得分:0)

请查看XML specification, especially section 2.6 Processing Instructions

  

PI不是文档字符数据的一部分,但必须传递给应用程序。

您必须将数据逐字传递给应用程序 如果要查看数据,则应以十六进制格式打印,例如十六进制转储实用程序。

此外,为了解释数据,您必须知道数据的布局。

由于它是应用程序数据,因此无法保证数据是可打印的。