我是一個c程序員,試圖開始我的生活在c + +的新階段(我知道我仍然使用下面的printf,但那是因爲格式化非常簡單)。我正在尋找從對象的成員函數打印數據文件的第一個字節。我認爲我的流緩衝在我讀取數據之前就被破壞了,但我失去了做什麼。在C++中通過類讀取二進制數據與streambuf
我的類看起來像下面
class MyParser {
MyParser(string filepath);
void readHeader();
streambuf *pbuf;
long size;
}
我的構造函數打開文件,從得到緩衝,輸出的第一個字節,並返回。 (我認爲pbuf
在這段代碼的最後會死掉)。此代碼輸出First Byte (in constructor): 0x8C
MyParser::MyParser(string filepath) {
ifstream file(filepath.c_str(), ios::in | ios::binary)
pbuf = file.rdbuf();
size = pbuf->pubseekoff(0,ios::end,ios::in);
pbuf->pubseekpos(0,ios::in);
unsigned char byte = pbuf->sgetc();
printf("First Byte (in constructor): 0x%02X\n", byte);
return;
}
我讀頭被傾倒的第一個字節,但是基於輸出都是看到的是First Byte (in readHeader): 0xFF
void MyParser::readHeader() {
unsigned char byte = pbuf->sgetc();
printf("First Byte (in readHeader): 0x%02X\n", byte);
}
我主要只是簡單地創建一個解析器,並試圖readHeader
void main() {
MyParser parser("../data/data.bin");
parser.readHeader();
}
我認爲我的問題的解決方案是創建一個new
streambuffer但new streambuf(file.rdbuf())
不工作fo我。有什麼建議?
您爲什麼使用緩衝器來代替['seekg'](http://en.cppreference.com/w/cpp/io/basic_istream/seekg)/ ['tellg'](HTTP: //www.cppreference.com/w/cpp/io/basic_istream/tellg)和['read'](http://en.cppreference.com/w/cpp/io/basic_istream/read)函數[ istream'](http://en.cppreference.com/w/cpp/io/basic_istream)類? –
我在這裏的例子如下:http://www.cplusplus.com/reference/iostream/ifstream/rdbuf/ – Jon