【发布时间】:2012-10-27 18:28:39
【问题描述】:
我是一名 c 程序员,正试图在 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 只是创建了一个解析器并尝试读取Header
void main() {
MyParser parser("../data/data.bin");
parser.readHeader();
}
我认为我的问题的解决方案是创建一个 new 流缓冲区,但 new streambuf(file.rdbuf()) 不适合我。有什么建议吗?
【问题讨论】:
标签: c++ object constructor streambuf