我正在尝试设置将 uint32_t
写入缓冲区,我将通过网络发送该缓冲区,但我不确定如何正确执行此操作。最初我假设 operator<<
会正确处理它并将 4 个字节写入缓冲区(假设我之前使用过 htonl
)。相反,我开始获得没有任何意义的值(value)观。我注意到,有时将单个 int 写入流有时会将缓冲区的大小增加多达十个字节,而不是预期的四个字节。我写了一个简短的测试并意识到它实际上是将 ascii 中的整数转储到缓冲区。我想我已经找到了解决方法,但感觉hacky,所以我正在寻找更好的方法,或者寻找证明为什么我正在做的事情实际上是正确的。
下面是一些示例代码:
boost::asio::streambuf buffer;
std::ostream os(&buffer);
uint32_t value = 0x12345678;
os << value; // Gives ascii 305419896
os.write((const char *) &value, sizeof(value)); // fives 0x12345678
有没有比我最后一行代码更好的方法来做到这一点?
最佳答案
您所做的很好,但是可以直接写入 streambuf:
buffer.commit(boost::asio::buffer_copy(
buffer.prepare(sizeof(value)),
boost::asio::buffer(&value, sizeof(value))));
关于c++ - 将 uin32_t 写入 asio::streambuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45656892/