我在结构struct in6_addr
中存储了两个ipv6地址。我想在不使用memcmp
的情况下找到哪一个更小。有没有更好的方法来比较ipv6地址?
struct in6_addr {
unsigned char s6_addr[16]; /* IPv6 address */
};
答案 0 :(得分:1)
从一般观点来看:写下你想做的事情,不要使用功能或技巧来实现你想要的!在这里,如果你想比较ip v6,首先,定义如何比较它,并按照你的定义实现。
因此,当您想要比较逻辑数据时,请不要使用memcmp
。仅在您想直接比较原始内存时使用它。
例如,如果您决定必须比较ipv6的每个元素,并且第一个不同的元素表示两个ipv6之间的关系,请写下:
// Not checked code, just an example
// Return 0 if ipA == ipB, -1 if ipA < ipB and 1 if ipA > ipB
int compare_ipv6(struct in6_addr *ipA, struct in6_addr *ipB)
{
int i = 0;
for(i = 0; i < 16; ++i) // Don't use magic number, here just for example
{
if (ipA->s6_addr[i] < ipB->s6_addr[i])
return -1;
else if (ipA->s6_addr[i] > ipB->s6_addr[i])
return 1;
}
return 0;
}