C++中有二进制内存流吗

2024-01-03

我通常使用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;

有任何想法吗?


要将二进制数据读取和写入流(包括字符串流),请使用 read() 和 write() 成员函数。所以

unsigned char a(1), b(2), c(3), d(4);
std::stringstream s;
s.write(reinterpret_cast<const char*>(&a), sizeof(unsigned char));
s.write(reinterpret_cast<const char*>(&b), sizeof(unsigned char));
s.write(reinterpret_cast<const char*>(&c), sizeof(unsigned char));
s.write(reinterpret_cast<const char*>(&d), sizeof(unsigned char));

s.read(reinterpret_cast<char*>(&v), sizeof(unsigned int)); 
std::cout << std::hex << v << "\n";

这给出了0x4030201在我的系统上。

编辑: 为了使用插入和提取运算符(>)透明地完成这项工作,您最好创建一个执行正确操作的派生 Streambuf,并将其传递给您想要使用的任何流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中有二进制内存流吗 的相关文章

随机推荐