我想读取一个二进制文件,其中包含一个start sequenz char [9]和一个char [5],用于5个ID。所以我打开了我的文件,但我不确定如何正确保存我的数据。
char[8] start_sq = "STARTSEQ\n" // start of the binary file
之后有5个ID。
那么如何在start_sq
之后设置我的起始位置int current_pos = 0;
std:ifstream readFile_;
int *id;
while( (current_pos = (readFile_.tellg())) == eof)
{
//start after start_sq // not sure how to
int tmp_id = readFile_.read(reinterpret_cast<char*>(&id), sizeof(int)); // should be first ID (OR?)
ids.push_back(tmo_id);
// again for ID 2
}
我明白了,如果我的问题一开始有点不清楚。但我不确定如何正确实现这一点。但是你可以看到我有一些想法/方法。
thx任何帮助:)
答案 0 :(得分:1)
是的,你会这样做:
[警告:以下内容绝对未经过测试!]
//int current_pos = 0;
std:ifstream readFile_;
... // Open the file in binary mode, etc...
//int *id;
char id;
// Read the 'STARTSEQ' string + 1 carriage return :
char[9] startseq;
readFile_.read(reinterpret_cast<char*>(&startseq[0]), 9);
// ^^^
// IMPORTANT : The above line shifts the current_pos of 9 bytes.
// Short : readFile_.read(startseq, sizeof(startseq));
// Then read your IDs
// You want your IDs as chars so let's read chars, not int.
while( readFile_.good() ) // or while( !readFile_.eof() )
{
readFile_.read(reinterpret_cast<char*>(&id), sizeof(char));
// IMPORTANT : The above line shifts the current_pos of 1 byte.
// Short : readFile_.read(&id, 1);
ids.push_back(id);
}
// The above 'while' loops until EOF is reached (aka. 5 times).
// See ifstream.good(), ifstream.eof().
注意:要读取的字符串(“STARTSEQ \ n”)长度为9个字符,而不是8个字符。
填充ids
向量的另一种方法可能是:
vector<char> ids;
int size = 5;
ids.resize(size);
// Read 'size' bytes (= chars) and store it in the 'ids' vector :
readFile_.read(reinterpret_cast<char*>(&ids[0]), size);
注意:此处不使用while
,但请注意:不检查是否已达到EOF。
我希望这就是你所要求的。