c++ - 将 uin32_t 写入 asio::streambuf

标签 c++ c++11 boost boost-asio iostream

我正在尝试设置将 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/

相关文章:

c++ - 由于滥用 MQTTAsync_connectOptions,paho cpp 客户端无法编译

c++ - boost::odeint 在成员类中调用

c++ - 如何使用不带前导零的 Boost.Date_Time 进行格式化?

C++ move 语义(和右值引用)与普通引用

c++11 - C++ gettid() 未在此范围内声明

c++ - 使用enable_if在按值传递与按引用传递之间更改函数声明

c++ - Boost 序列化不适用于 shared_ptr<int>

c++ - 无堆栈 C++20 协程有问题吗?

c++ - 显示数组中存储的 Hexa 值

c# - 从 DLL 打开对话框