gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:38:56 25 4
gpt4 key购买 nike

有没有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>>执行转换。

最佳答案

不,我会告诉你原因。

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

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

您要求从一种二进制形式转换为另一种二进制形式。这不是一回事,stream格式化的文本例程是错误的地方。

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

关于c++ - 是否有将主​​机字节顺序转换为网络字节顺序的 std::streambuf 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com