我是一名 ac 程序员,试图在 C++ 中开始我生命的新阶段(我知道我仍在使用下面的 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);
}
我的 main 只是创建了一个解析器并尝试 readHeader
void main() {
MyParser parser("../data/data.bin");
parser.readHeader();
}
我认为我的问题的解决方案是创建一个new
流缓冲区,但new streambuf(file.rdbuf())
对我不起作用。有什么建议吗?