c++ - 如何将 int 复制到 boost/std::char 数组?

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

将 int 复制到 boost/std::array 最简单有效的原因是什么?

以下似乎可行,但我不确定这是否是最合适的方法:

  int r = rand();
  boost::array<char, sizeof(int)> send_buf;
  std::copy(reinterpret_cast<char*>(&r), reinterpret_cast<char*>(&r + sizeof(int)), &send_buf[0]);

最佳答案

只是为了比较,这里和 memcpy 是一样的:

#include <cstring>

int r = rand();
boost::array<char, sizeof(int)> send_buf;
std::memcpy(&send_buf[0], &r, sizeof(int));

你的判断是,强制转换的爆炸式增长(以及出错的机会)比 C++ 中使用同样存在于 C 中的函数的“罪过”好还是坏 ;-)

我个人认为 memcpy 是这种操作的一个很好的“警报”,原因与 C++ 风格的转换是一个很好的“警报”相同(阅读时容易发现,容易搜索)。但您可能更喜欢对所有内容都使用相同的警报,在这种情况下,您可以将 memcpy 的参数转换为 void*

顺便说一句,我可能对两种大小都使用 sizeof r 而不是 sizeof(int),但这在某种程度上取决于上下文是否要求数组“足够大”对于 r(恰好是一个 int)”或“与 int(恰好是 r)大小相同”。因为它是一个发送缓冲区,我猜缓冲区是有线协议(protocol)要求的大小并且 r 应该匹配缓冲区,而不是相反。所以 sizeof(int) 可能是合适的,但 4PROTOCOL_INTEGER_SIZE 可能更合适。

关于c++ - 如何将 int 复制到 boost/std::char 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12472640/

相关文章:

c++ - 为什么 Linux 报告我的应用程序的内存使用量太大?

c++ - &* 用于原始指针、迭代器和 ... std::nullptr_t

c++ - 无法将结构数组传递给函数

C++11:使用自定义 Lambda 删除器返回 std::unique_ptr

c++ - 如何在 Qt 的 Mac 应用程序包中 bundle dylib?

c++ - 我应该看到 std::bind 和 boost::bind 之间的显着差异吗?

c++ - 如何在 Windows 上停止 boost::ioservice

c++ - 更改随机数生成器的参数

c++ - 是否可以在 C++11/14 语法中编写一个 lambda 函数来查看父变量?

c++ - <chrono> 溢出保证