विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++20 byte order endian

इंटरव्यू में byte order प्रायः बहुत महत्वपूर्ण विषय होता है, जिसमें पूछा जाता है:

  • big-endian और little-endian की अवधारणा
  • big-endian और little-endian कैसे पहचानें
  • host byte order
  • network byte order
  • आदि

, तो पहचानने के तरीके वास्तव में बहुत सारे हैं, उदाहरण के लिए:

  • C++20 का endian
  • union
  • address conversion
  • htons

तो इस सेक्शन में C++20 के big-endian/little-endian उपयोग और मूल ज्ञान पर चर्चा करते हैं।

नोट: आलसी लोगों के लिए, big-endian/little-endian पहचानने के 4 तरीकों का सोर्स कोड 星球 पर रखा गया है, रुचि हो तो प्राप्त कर लें।

1. Byte order की बुनियाद

सिस्टम का byte order उस क्रम को कहते हैं जिसमें बाइट्स मेमोरी में संग्रहीत होते हैं या नेटवर्क से भेजे जाते हैं। Big-endian सिस्टम सबसे कम मेमोरी पते पर सबसे अधिक सार्थक बाइट (MSB) रखता है। यही विभिन्न नेटवर्क प्रोटोकॉल में नेटवर्क से डेटा भेजने के लिए उपयोग होता है, इसे network byte order भी कहते हैं। Little-endian सिस्टम में, सबसे कम सार्थक बाइट (LSB) सबसे कम मेमोरी पते पर संग्रहीत होता है। उदाहरण के लिए, हेक्साडेसिमल संख्या 0x12345678 इस तरह संग्रहीत होती है:

  • Big-endian:
地址     | 值

n       | 0x12
n + 1   | 0x34
n + 2   | 0x56
n + 3   | 0x78
  • Little-endian
地址    | 值

n       | 0x78
n + 1   | 0x56
n + 2   | 0x34
n + 3   | 0x12

आर्किटेक्चर के अनुसार, भिन्न सिस्टम big-endian या little-endian host byte order वाले हो सकते हैं।

2. Byte order का महत्व

तो, यह महत्वपूर्ण क्यों है? यदि आपको नेटवर्क से डेटा भेजना है, तो आपको सुनिश्चित करना होगा कि वह network byte order में भेजा जाए। अधिकांश मामलों में, आपका host byte order little-endian होगा, जिसका अर्थ है कि डेटा भेजने से पहले आपको बाइट्स का क्रम उलटना होगा।

3. Byte order जाँचना

C++20 ने byte order जाँचने का एक अधिक सरल और portable तरीका पेश किया, यानी std::endian। आप std::endian::native का उपयोग करके सिस्टम का host byte order जाँच सकते हैं। नीचे एक सरल उदाहरण है:

void checkEndianness() {
  if constexpr (std::endian::native == std::endian::little) {
    std::cout << "小端" << std::endl;
  } else if constexpr (std::endian::native == std::endian::big) {
    std::cout << "大端" << std::endl;
  } else {
    std::cout << "未知" << std::endl;
  }
}

संबंधित विषय

टिप्पणियाँ