在C/C++中,字符串以NULL结尾.
我可以stringstream像MemoryStreamC#一样用作内存流吗?
内存流的数据可能\0在数据中间具有值,但C++字符串以NULL结尾.
在a中存储字符序列时,std::string您可以包含空字符.相应地,a std::stringstream也可以处理嵌入的空字符.但是,对流的各种格式化操作不会通过空字符.此外,当使用内置字符串为std::string空字符赋值时,重要的是,您需要使用以字符序列大小为参数的各种重载.
你到底想要达到什么目的?可能比在字符串流中旅行更容易.例如,如果要读取流接口以与内存缓冲区进行交互,则自定义流缓冲区非常易于编写和设置:
struct membuf
: std::streambuf
{
membuf(char* base, std::size_t size) {
this->setp(base, base + size);
this->setg(base, base, base + size);
}
std::size_t written() const { return this->pptr() - this->pbase(); }
std::size_t read() const { return this->gptr() - this->eback(); }
};
int main() {
// obtain a buffer starting at base with size size
membuf sbuf(base, size);
std::ostream out(&sbuf);
out.write("1\08\09\0", 6); // write three digits and three null chars
}
Run Code Online (Sandbox Code Playgroud)
在C/C++中,字符串以NULL结尾.
每种语言都有自己的字符串功能.
我可以在C#中使用stringstream作为MemoryStream等内存流吗?
当然.内存流是由内存(而不是文件)支持的流.这正是std :: stringstream的意思.界面有一些差异,但这些是次要的,使用文档应该可以轻松解决任何混淆.
内存流的数据在数据中间可能具有\ 0值,但C++字符串以NULL结尾.
这完全是错误的.
| 归档时间: |
|
| 查看次数: |
9505 次 |
| 最近记录: |