निम्नलिखित प्रोग्राम और इसके आउटपुट से पता चलता है कि INET_ADDRSTRLEN
को 16
और INET_ADDRSTRLEN
के रूप में परिभाषित किया गया है 46
के रूप में परिभाषित किया गया है।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
किया जाना है। आईपीवी 4 पते का सबसे बड़ा संभव स्ट्रिंग प्रतिनिधित्व 15 बाइट्स का उपभोग करता है, उदा। "255.255.255.255"
। इसलिए 16 बाइट्स को इस तरह के एक आईपी पते को अपने निरंतर शून्य चरित्र के साथ स्टोर करने की आवश्यकता होती है।
लेकिन INET6_ADDRSTRLEN
क्यों 46
होना चाहिए? आईपीवी 6 पते का सबसे बड़ा संभव स्ट्रिंग प्रतिनिधित्व केवल 39 बाइट्स (मेरे ज्ञान के अनुसार) का उपभोग करता है, उदाहरण के लिए "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
। इसलिए इस तरह के एक आईपी पते को अपने समापन शून्य चरित्र के साथ स्टोर करने के लिए केवल 40 बाइट्स की आवश्यकता होती है।
क्या आईपीवी 6 पते का एक स्ट्रिंग प्रतिनिधित्व है जो 46 बाइट्स का उपभोग कर सकता है?
संबंधित: [आईपीवी 6 पते के पाठपरक प्रतिनिधित्व की अधिकतम लंबाई?] (Http://stackoverflow.com/q/166132/1068283) –