繁体   English   中英

C++ IPv6 字符串表示为 boost::multiprecision::uint128_t

[英]C++ IPv6 string representation into boost::multiprecision::uint128_t

我需要将 IPv6 字符串地址转换为 boost::multiprecision::uint128_t 对于 IPv4,我使用了以下算法:

uint32_t byte1 = 0, byte2 = 0, byte3 = 0, byte4 = 0;
sscanf(ipAddress, "%3d.%3d.%3d.%3d", &byte1, &byte2, &byte3, &byte4);
uint32_t ip = (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | (byte4);

对于 IPv6,我该怎么做?

使用来自Wikipedia的示例:

在此处输入图像描述

还使用 Boost Asio 的address_v6实现而不是 1970 时代的解析:

住在科利鲁

#include <boost/asio/ip/address_v6.hpp>
#include <boost/multiprecision/cpp_int.hpp>
#include <cstdio>

using boost::asio::ip::address_v6;
using boost::multiprecision::int128_t;

int main() {
    auto v6 = address_v6::from_string("2001:0DBB:AC10:FE01::");

    int128_t val {};
    for (uint8_t b : v6.to_bytes())
        (val <<= 8) |= b;

    std::cout << std::hex << std::showbase << val << std::endl;
}

印刷

0x20010dbbac10fe010000000000000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM