我需要将读取到的 header 和有效负载拆分为字符串流。
我在字符串流中找到了有效负载的开始位置。
可以读取标题:
// where ss is the source stringstream
ssHeader.read(ss.str(), nDataStartPos-1);
现在我想将余数读入有效负载字符串流。
ssPayload.read(ss.str()+nDataStartPos, nTotalBytesRed);
失败并出现以下错误:
错误:从“const char*”到“char*”的无效转换
正在初始化 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) 的参数 1 [with _CharT = char, _Traits = std::char_traits]'
我猜测 str() 命令返回一个临时的,由字符串流的内部缓冲区构造。
所以我想我可以将 ssPayload 复制到一个字符串,然后执行一个 substr,但是有没有更有效的方法来实现这一点,或者 stringstream 可能是不适合这项工作的工具?
最佳答案
您猜对了,是的,stringstream 是不适合这项工作的工具。
通常我们读入一个固定缓冲区,重复将其内容复制到任何你想要的地方,直到所有内容都被读取。
是的,这很糟糕。
您可以使用流迭代器和 std::copy
。
关于c++ - 从字符串流中的偏移量读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34086802/