gpt4 book ai didi

c++ - 将C++ IPv6字符串表示形式转换为boost::multiprecision::uint128_t

转载 作者:行者123 更新时间:2023-12-02 10:15:42 26 4
gpt4 key购买 nike

我需要将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的示例:

enter image description here

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

Live On Coliru

#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

关于c++ - 将C++ IPv6字符串表示形式转换为boost::multiprecision::uint128_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com