c++ - 如何将 boost::asio::ip::address_v6 IP 转换为 2 uint64_t 数字并从 2 uint64_t 返回到 v6 地址?

标签 c++ boost-asio

我正在转换一个 boost::asio::ip::address_v6 IP(比如 1456:94ce:2567:a4ef:1356:94de:2967:a4e8)通过执行以下操作首先进入 16 字节 unsigned char 数组:

auto ip = boost::asio::ip::address_v6::from_string("1456:94ce:2567:a4ef:1356:94de:2967:a4e8");

auto v6Bytes = ip.boost::asio::ip::address_v6::to_bytes();

现在我的下一个目标是使用字节数组中的 8 个字节并将它们转换为 uint64_t(假设我得到 num1)。同样,使用数组中接下来的 8 个字节,我想生成另一个 uint64_t(比如 num2)。我可以在这里使用什么逻辑进行转换?

此外,一旦我得到 num1num2,我想使用它们并转换回

std::array<unsigned char, 16>

我可以在这里使用什么逻辑?

最佳答案

唯一支持的方法是使用 std::memcpy .将前八个字节复制到一个变量中,然后将其他八个字节复制到第二个变量中。

这可以通过 & 运算符和指针算法轻松实现:

std::uint64_t part1, part2;
std::memcpy(&part1, v6Bytes.data(), 8);
std::memcpy(&part2, v6Bytes.data() + 8, 8);

以相反的方式将数据复制回数组。

关于c++ - 如何将 boost::asio::ip::address_v6 IP 转换为 2 uint64_t 数字并从 2 uint64_t 返回到 v6 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51496197/

相关文章:

c++ - 为什么 NULL 不能作为 std::thread 执行函数的 void* 参数的参数?

c++ - 从(开放的)Solaris 交叉编译到 Windows?

c++ - boost 结构和类的 fusion 序列类型和名称识别

c++ - 将可变参数模板参数与 lambda 结合起来

c++ - Boost Asio connect_async 从不调用处理程序

c++ - 为什么这个将 main 定义为函数指针的程序会失败?

服务器和客户端之间交换数据后使用 boost 建立 BOOST TLS 连接

c++ - 通过引用传递 - C++ 中的 const_buffer 对象

boost-asio - 使用多个 io_service 对象

c++ - boost::asio 与 boost::unique_future