In einem allgemeinen Standpunkt aus: schreiben, was Sie, keine Funktionen oder Tricks anwenden, um zu erreichen, was Sie wollen, tun wollen! Wenn Sie ip v6 vergleichen möchten, definieren Sie zunächst, wie Sie es vergleichen und wie Sie es definiert haben.
Verwenden Sie also nicht memcmp
, wenn Sie logische Daten vergleichen möchten. Verwenden Sie es nur, wenn Sie direkten Rohspeicher vergleichen möchten.
Zum Beispiel, wenn Sie entscheiden, dass Sie jedes Element von IPv6- und ersten verschiedenen Elementen vergleichen haben, sagt Beziehung zwischen zwei ipv6, schreibt sie:
// 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;
}
Was die Typdefinition von 'struct in6_addr' ist? – user694733
Warum nicht iterieren über 's6_addr' Feld, um es eins nach dem anderen mit weniger als Operator zu vergleichen? – Garf365
Und warum können Sie 'memcmp' nicht auf 2' s6_addr' Mitgliedern verwenden? Scheint wie der einfachste Weg, den Vergleich zu machen. – user694733