c++ - 从字符串流中的偏移量读取

标签 c++ stringstream

我需要将读取到的 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/

相关文章:

c++ - 编程工作的伪代码帮助

c++ - 将十六进制缓冲区转换为无符号整数

c++ - 为什么不允许复制字符串流?

c++ - C++ 十六进制输出到字符串

c++ - stringstream 没有按预期工作

c++ - 将包含 std::thread 的类添加到 vector 中

c++ - 为什么 iplRotate() 没有给我正确的结果?

c++ - 如何将可变参数模板函数声明为友元?

c++ std::stringstream 给我奇怪的行为

c++ - 我怎样才能告诉 clang-format 遵循这个约定?