繁体   English   中英

如何在不使用memcmp的情况下比较c中的ipv6地址

[英]how to compare ipv6 address in c without using memcmp

我有两个ipv6地址存储在结构struct in6_addr 我想在不使用memcmp情况下找到哪一个更小。 有没有更好的方法来比较ipv6地址?

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

一般来说: 写下你想做的事 ,不要使用功能或技巧来实现你想要的! 在这里,如果你想比较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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM