В общих точках зрения: написать то, что вы хотите сделать, не используйте функцию или уловки, чтобы достичь того, чего вы хотите! Здесь, если вы хотите сравнить 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;
}
Что такое определение типа 'STRUCT in6_addr'? – user694733
Почему бы не перебрать поле 's6_addr', чтобы сравнить его по одному с меньшим, чем оператор? – Garf365
И почему вы не можете использовать 'memcmp' на 2 членах' s6_addr'? Похоже, самый простой способ сравнить. – user694733