是否有std :: streambuf版本将主机转换为网络字节顺序?

mav*_*vam 9 c++ networking boost endianness boost-asio

是否存在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
Run Code Online (Sandbox Code Playgroud)

编辑:答案表明这是思考问题的错误方法:流缓冲区只提供对字符序列的访问,他们的工作不是执行格式化的I/O或转换.我可能会实现一个小缓冲类,它为转换提供必要的重载operator<<operator>>执行转换.

Rob*_*obᵩ 7

不,我会告诉你原因.

istream::operator>>并对ostream::operator<<字符流进行操作,将它们从人类可读的形式转换为计算机的本机形式.streambuf除了提供(或接受)字符流之外,根本不参与该转换.

换句话说,格式化的I/O例程从字符形式转换为二进制形式.

您要求从一个二进制表单转换为另一个二进制表单.这不是一回事,stream格式化的文本例程是错误的查找位置.

这就是说,你可以创建自己的类实现operator<<operator>>,并有那些程序做网络字节交换.