用C ++编写IPv6的字典存储

时间:2017-04-09 11:40:35

标签: c++ c ipv6 lexicographic

我正在将一些代码从ruby移植到C ++。我们需要以Redis顺序以字典格式/顺序存储IPv6地址以执行范围查询(请参阅indexing)。原始代码将每个IPv6地址转换为十进制表示,并将零填充转换为40个字符宽度。 (用于IPv4的Lib是iprange - 见评论)

新代码主要是用C ++编写的,但使用libcidr进行IP地址解析和操作。因此,任何C或C ++答案都可以。我目前的格式是in6_addr定义为:

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

注意:

  • 我调查了__uint128_t我想避免的,因为它有目标要求
  • 被认为是十六进制表示,但据我所知,十六进制不是字典顺序
  • 我们正在尝试尽可能高效地处理,因此转换代码越优化越好

问题:

  • 是否有更好或其他方式将char[16]转换为字典顺序(而不是十进制表示)?
  • 是否有算法将这么长的数字转换为演示文稿格式?

提前致谢

0 个答案:

没有答案