是否有类似std::streambuf
的机制将多字节值转换为网络字节顺序?特别是,Boost Asio能提供如此原始的东西吗?以下是我希望流缓冲区执行的示例:
uint64_t x = 42ull;
network_streambuf b1;
std::ostream os(&b1);
os << 42ull; // htonll
network_streambuf b2;
std::istream is(&b2);
uint64_t y;
is >> y; // ntohll
编辑:答案表明这是思考问题的错误方法:流缓冲区只提供对字符序列的访问,他们的工作不是执行格式化的I / O或转换。我可能会实现一个小缓冲类,为operator<<
和operator>>
提供必要的重载来执行转换。
答案 0 :(得分:7)
不,我会告诉你原因。
istream::operator>>
和ostream::operator<<
对字符流进行操作,将其从人类可读的格式转换为计算机的本机格式。除了提供(或接受)字符流之外,streambuf
根本不参与该转换。
换句话说,格式化的I / O例程从字符形式转换为二进制形式。
您要求从一个二进制表单转换为另一个二进制表单。这不是一回事,stream
格式化的文本例程是错误的查找位置。
也就是说,你可以创建自己的实现operator<<
和operator>>
的类,让那些例程进行网络字节交换。< / p>