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>>执行转换.
不,我会告诉你原因.
istream::operator>>并对ostream::operator<<字符流进行操作,将它们从人类可读的形式转换为计算机的本机形式.streambuf除了提供(或接受)字符流之外,根本不参与该转换.
换句话说,格式化的I/O例程从字符形式转换为二进制形式.
您要求从一个二进制表单转换为另一个二进制表单.这不是一回事,stream格式化的文本例程是错误的查找位置.
这就是说,你可以创建自己的类实现operator<<和operator>>,并有那些程序做网络字节交换.
| 归档时间: |
|
| 查看次数: |
967 次 |
| 最近记录: |