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

时间:2012-03-07 16:58:37

标签: c++ networking boost boost-asio endianness

是否有类似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>>提供必要的重载来执行转换。

1 个答案:

答案 0 :(得分:7)

不,我会告诉你原因。

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

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

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

也就是说,你可以创建自己的实现operator<<operator>>的类,让那些例程进行网络字节交换。< / p>