उपर्युक्त तकनीक वास्तव में क्या कहा जाता है?
बिटफील्ड। और आपको केवल int
(signed
, unsigned
या अन्यथा) का उपयोग करना चाहिए, "प्रकार" के रूप में, char
नहीं।
आकार में चार बाइट्स से ऊपर या आकार में एक बाइट ऊपर है?
न तो। यह शायद sizeof(int)
है क्योंकि संकलक एक शब्द-आकार वाली वस्तु उत्पन्न करता है। हालांकि, वास्तविक बिटफील्ड को बाइट के भीतर संग्रहीत किया जाएगा। यह बस कुछ जगह बर्बाद कर देगा।
क्या वेरिएबल्स दिखाए गए अनुसार 1 (या 3) बिट्स के रूप में या 'हस्ताक्षरित चार' के रूप में माना जाता है, प्रत्येक बाइट के रूप में माना जाता है?
वे केवल निर्दिष्ट बिट्स का प्रतिनिधित्व करते हैं, और यथासंभव कसकर पैक किए जाएंगे।
क्या किसी केंद्रीकृत बाइट में बिट्स को जोड़ने का कोई तरीका है? उदाहरण के लिए तो:
उपयोग एक union
:
struct bits {
unsigned A:1;
unsigned B:3;
unsigned C:1;
unsigned D:3;
};
union SplitByte {
struct bits Bits;
unsigned char Byte[sizeof(struct bits)];
/* the array is a trick so the two fields
are guaranteed to be the same size and
thus be aligned on the same boundary */
} SplitByteObj;
// access the byte
SplitByteObj.Byte[0]
// access a bitfield
SplitByteObj.Bits.B
नोट bitfields के साथ समस्याओं जब धागे का उपयोग कर उदाहरण के लिए देखते हैं कि,। प्रत्येक बिटफील्ड को व्यक्तिगत रूप से एक्सेस नहीं किया जा सकता है, इसलिए यदि आप उनमें से प्रत्येक की रक्षा करने के लिए mutex का उपयोग करने का प्रयास करते हैं तो आपको त्रुटियां मिल सकती हैं। साथ ही, जिस क्रम में फ़ील्ड रखी गई हैं वह मानक द्वारा स्पष्ट रूप से निर्दिष्ट नहीं है। बहुत से लोग उस कारण से मैन्युअल रूप से बिटफील्ड को लागू करने के लिए बिटवाई ऑपरेटरों का उपयोग करना पसंद करते हैं।
क्या कोई ऐसा लेख है जो इस विषय को अधिक गहराई से कवर करता है?
बहुत से नहीं। जब आप Google को प्राप्त करेंगे तो आपको पहले कुछ मिलेंगे। वे व्यापक रूप से उपयोग किए जाने वाले निर्माण नहीं हैं। मानक के बारे में पता लगाने के लिए आप मानक से नापसंद कर सकते हैं कि वे वास्तव में कैसे काम करते हैं ताकि आप एक अजीब किनारे के मामले से काट नहीं पाएंगे। मैं आपको बिल्कुल बता नहीं सकता कि मानक में वे कहां निर्दिष्ट हैं।
यदि 'ए: 1' को पूरे बाइट की तरह माना जाता है, तो इसका बिंदु/बैंगनी क्या है?
ऐसा नहीं है, लेकिन मैंने इसे पहले ही संबोधित किया है।
जो नाम आप खोज रहे हैं वह है बिटफील्ड –
मुझे लगता है कि मुझे पूछना चाहिए: क्या आप सी या सी ++ का उपयोग कर रहे हैं? और यदि सी ++, क्या आप इसे गैर-पीओडी कक्षा में उपयोग कर रहे हैं? मुझे एहसास है कि सी ++ बिटफील्ड को पीओडी संरचना प्रकारों में प्रतिबंधित करता है। –
सी ++। मैं btoh सहित हूँ इसलिए मैं दोनों विनिर्देशों के मतभेदों को जानता हूं (और लागू समाधानों को विस्तारित करने के लिए)। और हाँ, मैं इसे कक्षा में उपयोग कर रहा हूं (हालांकि इस समय यह डिज़ाइन चरण है), अगर इसे केवल एक स्ट्रक्चर के रूप में उपयोग किया जा सकता है, तो मैं आसानी से बदल सकता हूं। यह एक जीआईएफ छवि लोडिंग कार्यक्रम के लिए। – SSight3