有一个函数Foo
,它接受一个char
的输入流。我想从我的函数Bar
调用Foo
,它接受一个大小为char
的C风格数组。char
用于表示一个字节(不使用std::byte
,因为很难让它处理流)。
void Foo(std::basic_istream<char>& stream) { /* ... */ }
// absl::Span<const char> in my code, using char pointer
// and size here for simplicity.
void Bar(const char * const arr, const size_t size) {
std::basic_istream<char> stream = ArrToStream(arr, size);
foo(stream);
}
字符串
我正在努力实现ArrToStream
。
如果我将std::ifstream
的示例传递给Foo
,一切都按预期工作。当涉及到ArrToStream
时,似乎最推荐的方法就是像下面这样使用std::istringstream
:
std::basic_istream<char> ArrToStream(
const char * const arr,
const size_t size
) {
return std::istringstream(arr, size);
}
型
然而,这只适用于数组中没有'\0'
字符的情况。我的数据中有很多0字节,所以输入字符串流将它们视为null终止符并停止阅读流。我尝试调用stream.clear()
和stream.seekg(...)
,但到目前为止没有运气,字符串流只是拒绝读取过去的0。
有没有办法读取或忽略'\0'
?如果没有,在C++20中表示字节流的最佳方法是什么?
1条答案
按热度按时间6l7fqoea1#
不清楚(至少对我来说)你遇到了什么问题。用一个包含NUL字符的字符串初始化一个字符串流非常容易:
字符串
至少当我运行这个命令时,它成功了,这表明NULL被放置在流中,并且我们在之后成功地将它们读回。