我有一些文本解析,无论是从文件还是从字符串流中读取,我都希望行为相同。因此,我正在尝试使用 anstd::istream
来执行所有工作。在字符串版本中,我试图让它从我创建的静态内存字节数组(最初来自文本文件)中读取。假设原始文件如下所示:
4
对应的字节数组是这样的:
const char byte_array[] = { 52, 13, 10 };
其中 52 是字符 4 的 ASCII,然后是回车,然后是换行。
当我直接从文件中读取时,解析工作正常。
当我尝试像这样以“字符串模式”阅读它时:
std::istringstream iss(byte_array);
std::istream& is = iss;
我最终将回车卡在使用此方法从字符串流中检索到的字符串的末尾:
std::string line;
std::getline(is, line);
这搞砸了我的解析,因为该string.empty()
方法不再在“空白”行上触发——每行至少包含一个13
用于回车的回车,即使它在生成二进制数据的原始文件中是空的。
为什么在这方面的ifstream
行为不同于istringstream
?我怎样才能让istringstream
版本像版本一样丢弃回车ifstream
?