Poniższy program i jego dane wyjściowe pokazują, że INET_ADDRSTRLEN
jest zdefiniowany jako 16
, a INET_ADDRSTRLEN
jest zdefiniowany jako 46
.Dlaczego INET6_ADDRSTRLEN zdefiniowano jako 46 w C?
Oto program.
#include <stdio.h>
#include <arpa/inet.h>
int main()
{
printf("%d\n", INET_ADDRSTRLEN);
printf("%d\n", INET6_ADDRSTRLEN);
return 0;
}
Tutaj jest wyjście.
16
46
mogę zrozumieć dlaczego INET_ADDRSTRLEN
musi być 16
. Największa możliwa reprezentacja ciągów adresu IPv4 pochłania 15 bajtów, np. "255.255.255.255"
. Dlatego 16 bajtów jest wymaganych do zapisania takiego adresu IP z jego końcowym znakiem pustym.
Ale dlaczego INET6_ADDRSTRLEN
musi być 46
? Największa możliwa reprezentacja ciągów adresu IPv6 pochłania tylko 39 bajtów (zgodnie z moją wiedzą), np. "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
. Dlatego wymagane jest tylko 40 bajtów do przechowywania takiego adresu IP z jego końcowym znakiem pustym.
Czy istnieje ciąg znaków reprezentujący adres IPv6, który może pochłonąć 46 bajtów?
Powiązane: [Maksymalna długość tekstowej reprezentacji adresu IPv6?] (Http://stackoverflow.com/q/166132/1068283) –