gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:12:34 25 4
gpt4 key购买 nike

我有两个 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;
}

关于c - 如何在不使用memcmp的情况下在c中比较ipv6地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37786946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com