INET6_ADDRSTRLEN이 C에서 46으로 정의된 이유는 무엇입니까?
다음 프로그램과 그 출력은 다음을 보여줍니다.INET_ADDRSTRLEN다음과 같이 정의됩니다.16그리고.INET6_ADDRSTRLEN다음과 같이 정의됩니다.46.
여기 프로그램이 있습니다.
#include <stdio.h>
#include <arpa/inet.h>
int main()
{
printf("%d\n", INET_ADDRSTRLEN);
printf("%d\n", INET6_ADDRSTRLEN);
return 0;
}
여기 출력이 있습니다.
16
46
그 이유를 이해할 수 있습니다.INET_ADDRSTRLEN필요한16. IPv4 주소의 가능한 최대 문자열 표현은 15바이트를 소비합니다."255.255.255.255". 따라서 이러한 IP 주소를 종단 null 문자로 저장하려면 16바이트가 필요합니다.
그런데 왜?INET6_ADDRSTRLEN있어야 할46? IPv6 주소의 가능한 최대 문자열 표현은 (내가 아는 바에 따르면) 39 바이트만 소비합니다."ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff". 따라서 종료 Null 문자를 사용하여 이러한 IP 주소를 저장하는 데 필요한 바이트는 40바이트에 불과합니다.
46바이트를 소비할 수 있는 IPv6 주소의 문자열 표현이 있습니까?
INET6_ADDRSTRLEN이 C에서 46으로 정의된 이유는 무엇입니까?
POSIX는 다음과 같이 정의합니다.
INET6_ADDRSTRLEN
46. IPv6에 대한 문자열 양식의 길이입니다.
IPv4 터널링의 경우 가장 긴 IPv6 주소가 39바이트가 소요되는 것은 맞지만 가장 긴 형식은 45바이트가 될 수 있습니다.
ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255
그리고 46번째 바이트는 종결 null 바이트(Ca 문자열)를 위한 것입니다.이것이 어떻게 46세가 되었는지 설명해 줍니다.
아마도 IPv4 매핑 형식의 주소에 대한 것일 것입니다.
ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255
자세히 보기:
언급URL : https://stackoverflow.com/questions/39443413/why-is-inet6-addrstrlen-defined-as-46-in-c
'programing' 카테고리의 다른 글
| 저장 프로시저를 작성할 때 'definer'가 필요합니까? (0) | 2023.11.06 |
|---|---|
| 응답 J를 검색하는 방법jquery $.jax 객체의 SON 속성 (0) | 2023.11.01 |
| C: 다자리 숫자를 별도의 변수로 분할하는 방법은? (0) | 2023.11.01 |
| Woocommerce 제품 변동 드롭다운에 변동 재고 수량 및 상태 추가 (0) | 2023.11.01 |
| PHP에서 하이버네이트와 비슷한 것이 있습니까? (0) | 2023.11.01 |