2009-08-21 16 views
9

Jeśli oświadczamC# flagi wyliczenia wielkości słowo

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

Czy istnieje sposób, aby określić/ustawić liczbę bajtów, które to enum zajmuje? A także, w jakiej kolejności bajtów to się skończy? (np. czy muszę zrobić HostToNetwork(), aby poprawnie wysłać go przez przewód?) Ponadto, aby zadzwonić do HostToNetwork, czy mogę obsłużyć jako tablicę bajtów i iterować?

+3

Nie ma potrzeby, aby to było wiki społeczności. To standardowe pytanie. – Noldorin

+0

Możesz sprawdzić koniec systemu za pomocą 'BitConverter.IsLittleEndian' i odpowiednio zareagować. – Thorarin

+0

Flagi nie powinny mieć wartości 0, chyba że naprawdę oznacza "brak". –

Odpowiedz

6

pełna odpowiedź brzmi:

  • Czy istnieje sposób, aby ustalić/ustawić liczbę bajtów, które to enum zajmuje?

Tak:

[Flags] 
public enum MyColor : byte // sets the underlying type. 
{ 
    Red = 1; 
    Green = 2; 
    Blue = 4; 
    White = 8; 
    Magenta = 16; 
    ... (etc) 
} 
  • Ponadto, co bajt zamówienie byłoby zakończyć się?

Cokolwiek jest skompilowane, więc w moim przypadku, x86 (mało).

  • Również, aby połączyć się z HostToNetwork, czy mogę wyświetlać jako tablicę bajtów i iterować?

To jest bardzo trudne. Dowiedziałem się kilka rzeczy:

+0

Można również * uzyskać * podstawowy typ za pomocą '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) 
} 

Nie można bezpośrednio ustawić endianness. Możesz użyć dobrze spreparowanych liczb, które symulują big-endianowe bajty na małym systemie endian. Zawsze jednak używałam jawnych API do konwersji zleceń bajtowych.

+4

Dla odniesienia domyślny rozmiar, jeśli nie określono, to Int32, a bycie standardowymi liczbami pod maską ma takie same reguły jak liczba, jeśli chodzi o kolejność bajtów. –