是否有类似于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>>
提供必要的重载以执行转换。
b2
,那么您的问题将更有意义。此外,为什么operator<<(…, unsigned long long)
会调用htons
?难道不应该调用htonll
吗? - Robᵩostream
)完成后,它会将字节流传递给streambuf
。听起来你实际上想要一个“二进制”的ostream
,如果你正试图解决输出数字的字节顺序问题。 - CB Bailey