यहां हम देखेंगे कि C++ में लिटिल एंडियन वैल्यू को बिग एंडियन या बिग एंडियन वैल्यू को लिटिल एंडियन में कैसे बदलें। वास्तविक चर्चा में जाने से पहले, हम देखेंगे कि बड़ा एंडियन और छोटा एंडियन क्या है?
विभिन्न आर्किटेक्चर में, मल्टी-बाइट डेटा को दो अलग-अलग तरीकों से संग्रहीत किया जा सकता है। कभी-कभी उच्च क्रम के बाइट्स को पहले संग्रहीत किया जाता है, उस स्थिति में इन्हें बड़े एंडियन के रूप में जाना जाता है, और कभी-कभी निचले क्रम के बाइट्स को पहले संग्रहीत किया जाता है, फिर इसे थोड़ा एंडियन कहा जाता है।
उदाहरण के लिए, यदि संख्या 0x9876543210 है, तो बड़ा एंडियन होगा -
नन्हा एंडियन ऐसा होगा -
इस भाग में हम देखेंगे कि छोटे एंडियन को बड़े एंडियन में कैसे बदला जाए और इसके विपरीत। ऐसा करने के लिए हमें 1 और 4 बाइट्स, और 2 और 3 बाइट्स को इंटरचेंज करना होगा। हम तार्किक अभिव्यक्तियों का उपयोग करके उनका आदान-प्रदान कर सकते हैं। चार बार नंबर की कॉपी बनाएं, फिर पहली कॉपी के लिए, पहली बाइट को 24 बार दाईं ओर शिफ्ट करें, दूसरी कॉपी के लिए, इसे 00FF0000 से मास्क करें, फिर 8 बिट्स को दाईं ओर स्वैप करें, तीसरी कॉपी के लिए इसे 0000FF00 से मास्क करें। , फिर बाईं ओर 8 बिट्स को शिफ्ट करें, और अंतिम कॉपी के लिए तत्वों को 24 बार बाईं ओर स्वैप करें। फिर तार्किक रूप से या इन चार प्रतियों को उल्टा परिणाम प्राप्त करने के लिए।
उदाहरण
#include <iostream> #define SWAP_INT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24)) using namespace std; void memory_represent(char *value, int n) { int i; for (i = 0; i < n; i++) printf(" %.2x", value[i]); } int main() { unsigned int x = 0x9876543210; int y; cout << "The little endian value is: "; memory_represent((char*)&x, sizeof(x)); cout << endl; y = SWAP_INT32(x); cout << "The Big endian value after conversion is: "; memory_represent((char*)&y, sizeof(y)); cout << endl; }
आउटपुट
The little endian value is: 10 32 54 76 The Big endian value after conversion is: 76 54 32 10