2009-08-21 14 views
9

तो मैं घोषितसी # झंडे enum शब्द आकार

[Flags] 
public enum MyColor 
{ 
    Red = 1; 
    Green = 2; 
    Blue = 4; 
    White = 8; 
    Magenta = 16; 
    ... (etc) 
} 

यह तय करने के लिए एक रास्ता है/सेट बाइट्स की संख्या है कि इस enum तक ले जाता है? इसके अलावा, यह किस बाइट ऑर्डर में समाप्त होगा? (उदाहरण के लिए मुझे इसे होस्ट पर सही तरीके से भेजने के लिए HostToNetwork() करना है?) इसके अलावा, HostToNetwork को कॉल करने के लिए, क्या मैं बाइट सरणी और पुनरावृत्ति के रूप में डाला जा सकता हूं?

+3

समुदाय विकी होने की आवश्यकता नहीं है। यह एक मानक सवाल है। – Noldorin

+0

आप 'बिटकॉन्टर.इस्लिटल इंडियन' के साथ सिस्टम की अंतहीनता की जांच कर सकते हैं और तदनुसार प्रतिक्रिया दे सकते हैं। – Thorarin

+0

झंडे के पास 0 मान नहीं होना चाहिए जब तक कि इसका वास्तव में "कोई नहीं" हो। –

उत्तर

6

पूरा जवाब है:

  • यह तय करने के लिए एक रास्ता है/सेट बाइट्स की संख्या है कि इस enum तक ले जाता है?

हाँ:

[Flags] 
public enum MyColor : byte // sets the underlying type. 
{ 
    Red = 1; 
    Green = 2; 
    Blue = 4; 
    White = 8; 
    Magenta = 16; 
    ... (etc) 
} 
  • इसके अलावा, क्या बाइट, जिससे उसमें अंत होगा?

जो कुछ भी संकलित है, तो मेरे मामले में, x86 (छोटा)।

  • इसके अलावा, होस्टटॉनेटवर्क को कॉल करने के लिए, क्या मैं बाइट सरणी और पुनरावृत्ति के रूप में डाला जा सकता हूं?

यह वह जगह है जहां यह मुश्किल है।

  • enum की अंतर्निहित प्रकार का विस्तार होगा (या द्वारा विस्तारित किया जा ": लंबे" आप घोषणा के अंत में टैग करने के लिए है) मैं कुछ चीजें पता चला और यह एक प्रकार होना चाहिए। तो वास्तव में ऐसा करना असंभव है जो मैं वास्तव में करने की कोशिश कर रहा था (6 बाइट्स का एक enum)।
  • इस संरचना का क्रमबद्ध बाइट्स की एक सरणी (नेटवर्क ऑर्डर में परिवर्तित करने के लिए, और तार पर भेजा गया) अविश्वसनीय रूप से सरल नहीं है। बिटकॉन्टर क्लास चाल करता है, लेकिन यह अंतहीनता के बीच नृत्य के लिए बहुत उपयोगी है: http://snipplr.com/view/15179/adapt-systembitconverter-to-handle-big-endian-network-byte-ordering-in-order-to-create-number-types-from-bytes-and-viceversa/
+0

इसके अलावा, आप * Enum.GetUnderlyingType (typeof (MyColor)) के साथ अंतर्निहित प्रकार * प्राप्त कर सकते हैं: http://msdn.microsoft.com/en-us/library/system.enum.getunderlyingtype.aspx –

10
[Flags] 
public enum MyColor : byte // sets the underlying type. 
{ 
    Red = 0; 
    Green = 1; 
    Blue = 2; 
    White = 4; 
    Magenta = 8; 
    ... (etc) 
} 

सीधे अंत्येष्टि सेट करना संभव नहीं है। आप कुछ अच्छी तरह से तैयार की गई संख्याओं का उपयोग कर सकते हैं जो छोटे एंडियन सिस्टम पर बड़े-एंडियन बाइट्स का अनुकरण करते हैं। हालांकि, मैं बाइट ऑर्डर को बदलने के लिए हमेशा स्पष्ट एपीआई का उपयोग करता हूं।

+4

संदर्भ के लिए डिफ़ॉल्ट आकार इंट 32 है, और हुड के नीचे मानक संख्या होने पर बाइट ऑर्डर की स्थिति में सभी समान नियम होते हैं। –

संबंधित मुद्दे