我有一个二进制格式的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">
有人可以帮助我解决这个问题,以便我可以获得可读的输出吗?
答案 0 :(得分:0)
请查看XML specification, especially section 2.6 Processing Instructions。
PI不是文档字符数据的一部分,但必须传递给应用程序。
您必须将数据逐字传递给应用程序 如果要查看数据,则应以十六进制格式打印,例如十六进制转储实用程序。
此外,为了解释数据,您必须知道数据的布局。
由于它是应用程序数据,因此无法保证数据是可打印的。