Лексикографическое хранение IPv6 в переполнении стека

Я портирую некоторый код с ruby ​​на C ++. Нам нужно хранить адреса IPv6 в лексикографическом формате / порядке в Redis для выполнения запросов диапазона (см. индексирование). Исходный код преобразует каждый IPv6-адрес в его десятичное представление и ноль в ширину до 40 символов. (Lib используется для IPv4 IPRange — смотрите комментарии)

Новый код в основном написан на C ++, но использует libcidr для анализа IP-адресов и манипуляций. Следовательно, подойдет любой ответ на C или C ++. Формат у меня на данный момент есть in6_addr определяется как:

struct in6_addr {
unsigned char   s6_addr[16];   /* IPv6 address */
};

Заметки:

  • Я смотрел в __uint128_t которого я хотел бы избежать, поскольку он имеет целевые требования
  • Считается шестнадцатеричным представлением, но, насколько я понимаю, гекс не в лексикографическом порядке
  • Мы стараемся обрабатывать как можно более эффективно, поэтому чем больше оптимизирован код преобразования, тем лучше

Вопросы:

  • Есть ли лучший или другой способ конвертировать char[16] в лексикографическом порядке (вместо десятичного представления)?
  • Есть ли алгоритм для преобразования таких длинных чисел в формат представления?

заранее спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]