私はc++で私の人生の新しい段階を始めようとしているacプログラマーです(私はまだ以下のprintfを使用していることを知っていますが、それはフォーマットがとても簡単だからです)。オブジェクトのメンバー関数からデータファイルの最初のバイトを出力しようとしています。データを読み取る前にストリームバッファが破棄されていると思いますが、どうすればよいかわかりません。
私のクラスは次のようになります
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
はnew streambuf(file.rdbuf())
うまくいきません。何かアドバイス?