25std::string
ipv6(
const std::array<uint16_t, 8>& address)
noexcept {
26 size_t compress_length = 0;
30 if (compress_length <= 1) {
33 compress = compress_length = 8;
36 std::string output(4 * 8 + 7 + 2,
'\0');
37 size_t piece_index = 0;
38 char* point = output.data();
39 char* point_end = output.data() + output.size();
42 if (piece_index == compress) {
46 if (piece_index == 0) {
49 piece_index += compress_length;
50 if (piece_index == 8) {
54 point = std::to_chars(point, point_end, address[piece_index], 16).ptr;
56 if (piece_index == 8) {
62 output.resize(point - output.data());
66std::string
ipv4(
const uint64_t address)
noexcept {
67 std::string output(15,
'\0');
68 char* point = output.data();
69 char* point_end = output.data() + output.size();
70 point = std::to_chars(point, point_end, uint8_t(address >> 24)).ptr;
71 for (
int i = 2; i >= 0; i--) {
73 point = std::to_chars(point, point_end, uint8_t(address >> (i * 8))).ptr;
75 output.resize(point - output.data());