我通常使用 stringstream
写入内存字符串。有没有办法以二进制模式写入字符缓冲区?考虑以下代码:
stringstream s;
s << 1 << 2 << 3;
const char* ch = s.str().c_str();
ch
的内存将如下所示: 0x313233 - 字符 1、2 和 3 的 ASCII 码。我正在寻找一种自己编写二进制值的方法。也就是说,我希望内存中有 0x010203。问题是我希望能够编写一个函数
void f(ostream& os)
{
os << 1 << 2 << 3;
}
并决定外部使用哪种流。像这样的东西:
mycharstream c;
c << 1 << 2 << 3; // c.data == 0x313233;
mybinstream b;
b << 1 << 2 << 3; // b.data == 0x010203;
有任何想法吗?
原文由 FireAphis 发布,翻译遵循 CC BY-SA 4.0 许可协议
我真的很喜欢韩洛的方法,并且已经验证了它的效果很好!如果将 oss 成员变量更改为使用 std::stringstream (与 ostringstream 相比) ,该类也可用于使用重载流提取运算符进行提取,如下所示:
示例模板支持整数类型,如果为 std::is_compound 添加新模板,则还可以支持 std::map 等类型。对于 std::vector 之类的东西,即“is_fundemental”,我建议先将大小推送到流中,因此在提取端可以拉出它以了解之后要拉出多少元素。这种方法可以很好地与常见的 std::vector 和 std::map 类型一起使用。