अंतिम अद्यतन: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:
- Little-endian
आर्किटेक्चर के अनुसार, भिन्न सिस्टम 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;
}
}
संबंधित विषय¶
- C++20 coroutines परिचय | C++那些事
- C++20 channel व्यवहारिक उपयोग | C++那些事
- C++20 Concepts अवधारणा | C++那些事
- C++20 constexpr और comma एक्सप्रेशन | C++那些事
- C++20 Lambda एक्सप्रेशन (भाग 1) | C++那些事
- C++20 Modules मॉड्यूल | C++那些事
- C++20 Ranges लाइब्रेरी | C++那些事
- C++20 std::span डिज़ाइन और जाल | C++那些事
- C++20 नई विशेषताओं की जानकारी | C++那些事
- C++20 [[likely]] और [[unlikely]] | C++那些事