आप किसी भी संरचना को छोटे-एंडियन वाले प्रोसेसर पर बाइट सरणी में कैसे परिवर्तित करेंगे?संरचना को बाइट्स में कनवर्ट करें
उत्तर
आप C++ वस्तु के किसी भी प्रकार का उपयोग करने की, तो एक char*
उपयोग कर सकते हैं:
struct S
{
int a;
int b;
// etc.
};
S my_s;
char* my_s_bytes = reinterpret_cast<char*>(&my_s);
// or, if you prefer static_cast:
char* my_s_bytes = static_cast<char*>(static_cast<void*>(&my_s));
(वहाँ reinterpret_cast
बनाम static_cast
के सही होने में कम से कम some debate है; व्यवहार में यह वास्तव में कोई फर्क नहीं पड़ता - दोनों को एक ही परिणाम मिलना चाहिए)
:-) सी ++ पर अब भी कई भाषा सुधार। पहले, यह पर्याप्त होगा: 'char * b = (char *) &my_s; 'शायद अगर मैं फिर से सी ++ सीखता हूं, तो मैं उन कलाकारों के बारे में कुछ पढ़ूंगा। –
@ माइकल: उस सी-स्टाइल कास्ट इस मामले में 'reinterpret_cast' जैसा ही है, क्योंकि' static_cast' और 'const_cast' का कोई संयोजन मान्य नहीं है। सी ++ शैली का उपयोग करने से गारंटी मिलती है कि आप जिस कलाकार का इरादा रखते हैं उसे प्राप्त करें; सी-स्टाइल कास्ट मूल रूप से केवल पांच अलग-अलग प्रकार के कास्टों का अनुक्रम करने की कोशिश करता है जब तक कि यह काम न करे। –
उत्तर आपके द्वारा निर्दिष्ट संरचना को सही है। हालांकि, वहां कुछ शॉर्ट्स, big_integers, या चरित्र डेटा फेंक दें और यह बहुत गलत है। –
I like to use a union.
typedef struct b {
unsigned int x;
unsigned int y;
} b_s;
typedef union a {
b_s my_struct;
char ary[sizeof(b_s)];
} a_u;
क्यों न केवल 'आर्य [आकार (बी)] '? –
@Rob मेला पर्याप्त ... बदल गया। – WhirlWind
आप क्या करने की कोशिश कर रहे हैं? यदि आप संरचना को क्रमबद्ध करने की कोशिश कर रहे हैं ताकि आप इसे किसी फ़ाइल में सहेज सकें या किसी संदेश में पास कर सकें, तो आप boost::serialization जैसे किसी टूल का उपयोग करके बेहतर हो सकते हैं।
तुम सिर्फ बाइट्स की एक सरणी आप reinterpret_cast<char*>
के रूप में दूसरों का उल्लेख किया है, या कर सकता है चाहते हैं:
MyStruct s;
char [] buffer = new char[sizeof(s)];
memcpy(&buffer, &s, sizeof(s));
मैं void*
में झाँकने होगा।
struct gizmo
{
//w/e
};
//stuff
gizmo *G = new gizmo;
void* bytearray = (void*)G;
आपकी संरचना कैसे पैक की जाती है अस्पष्ट है और संकलक, एबीआई और सीपीयू पर निर्भर करती है। आपको अपने मैनुअल & कुछ असेंबली पढ़ने से इसे समझना होगा।
आप एक शून्य * – nos
@nos के माध्यम से बाइट्स तक नहीं पहुंच सकते हैं: कृपया विस्तार करें। –
चूंकि आप एक शून्य * को अस्वीकार नहीं कर सकते हैं, इसलिए आप जो कुछ भी इंगित करते हैं, उस पर आप इसका उपयोग नहीं कर सकते हैं (संभवतः मेमकी का उपयोग करके बार, जिस स्थिति में मध्यवर्ती शून्य * की आवश्यकता नहीं है) foo [0]; अगर foo एक शून्य * है तो एक कंपाइलर त्रुटि है। व्यक्तिगत बाइट्स तक पहुंचने के लिए एक हस्ताक्षरित char * का उपयोग करें। – nos
इन सभी उत्तरों के साथ समस्या यह है कि आप वास्तव में डेटा के बारे में कुछ जानने के बिना बेवकूफ बाइट स्वैपिंग नहीं कर सकते हैं। चरित्र डेटा स्वैप हो जाता है। 64-बिट पूर्णांकों को अलग-अलग प्रकार के स्वैपिंग की आवश्यकता होती है, इस पर निर्भर करता है कि प्रश्न में दो प्रोसेसर ने उन्हें कैसे लागू किया।
- 1. जावा: बाइट्स की सूची बाइट्स की सरणी में कनवर्ट करें
- 2. 16-बिट हस्ताक्षरित int 2-बाइट्स में कनवर्ट करें?
- 3. बाइट्स को एक स्ट्रिंग में कनवर्ट करना C#
- 4. बाइट्स
- 5. sqlite टेक्स्ट को संख्याओं में कनवर्ट करें
- 6. जावा - 4 बाइट्स के बाइट ऐरे में int को कनवर्ट करें?
- 7. 2 बाइट्स को
- 8. स्ट्रिंग को डबल में कनवर्ट करें - वीबी
- 9. सीएसटींग को वर्ण सरणी में कनवर्ट करें?
- 10. बिटमैप को बाइट सरणी में कनवर्ट करें
- 11. java.util.Set को scala.collection में कनवर्ट करें।
- 12. कॉमा को पूर्णांक में कनवर्ट करें
- 13. इनपुटस्ट्रीम (छवि) को ByteArrayInputStream में कनवर्ट करें
- 14. स्ट्रिंग को गणितीय मूल्यांकन में कनवर्ट करें
- 15. जेननेल को छवि में कनवर्ट करें
- 16. टाइमस्टोन में टाइमस्टैम्प को कनवर्ट करें
- 17. पॉलीगॉन को त्रिकोणों में कनवर्ट करें
- 18. jiffies को सेकंड में कनवर्ट करें
- 19. सरणी को स्ट्रिंग में कनवर्ट करें? सी #
- 20. SimpleXML को DOMDocument में कनवर्ट करें, DOMElement
- 21. तिथि को मिलीसेकंड में कनवर्ट करें
- 22. एनएसआईएनटेगर को NSUInteger में कनवर्ट करें?
- 23. UIImage को CVPixelBufferRef में कनवर्ट करें
- 24. फ़ंक्शन को सिमुलिंक ब्लॉक में कनवर्ट करें
- 25. वेब पेज को छवि में कनवर्ट करें
- 26. छवि को बाइनरी में कनवर्ट करें?
- 27. मिमी को पिक्सल में कनवर्ट करें
- 28. स्ट्रिंग टेक्स्ट को बिटमैप में कनवर्ट करें
- 29. तारीखों को संख्याओं में कनवर्ट करें
- 30. स्ट्रिंग को डेटाटाइम में कनवर्ट करें
कृपया अपने अनुरोध पर विस्तार करें - और ध्यान दें कि आपका उत्तर अत्यंत प्रोसेसर आर्किटेक्चर निर्भर होगा – KevinDTimm
थोड़ा एंडियन के लिए एड्रेसिंग यूनिट क्या है? आप वास्तव में क्या करने की कोशिश कर रहे हैं? – WhirlWind