[英]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.