2009-08-21 23 views
9

Si Declarobanderas C# tamaño de palabra enumeración

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

¿Hay una manera de determinar/establecer el número de bytes que esta enumeración ocupa? Además, ¿a qué orden de bytes terminaría? (Por ejemplo, ¿tengo que hacer una HostToNetwork() para enviarla correctamente por el cable?) Además, para llamar a HostToNetwork, ¿puedo convertirme en una matriz de bytes e iterar?

+3

No es necesario que esto sea wiki de la comunidad. Es una pregunta estándar. – Noldorin

+0

Puede verificar la compatibilidad del sistema con 'BitConverter.IsLittleEndian', y reaccionar en consecuencia. – Thorarin

+0

Las banderas no deben tener un valor 0 a menos que realmente signifique "ninguna". –

Respuesta

6

La respuesta completa es:

  • ¿Hay una manera de determinar/establecer el número de bytes que esta enumeración ocupa?

Sí:

[Flags] 
public enum MyColor : byte // sets the underlying type. 
{ 
    Red = 1; 
    Green = 2; 
    Blue = 4; 
    White = 8; 
    Magenta = 16; 
    ... (etc) 
} 
  • Además, ¿qué fin tendría que terminar en bytes?

Cualquiera que sea su compilación, por lo que para mi caso, x86 (poco).

  • Además, para llamar a HostToNetwork, ¿puedo convertir como una matriz de bytes e iterar?

Aquí es donde es difícil. He encontrado un par de cosas:

+0

Además, puede * obtener * el tipo subyacente con '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) 
} 

No es posible establecer directamente el endianness. Puede utilizar algunos números bien diseñados que simulan bytes de Big-Endian en un pequeño sistema endian. Sin embargo, siempre usaría API explícitas para convertir pedidos de bytes.

+4

Como referencia, el tamaño predeterminado si no se especifica es Int32, y los números estándar bajo el capó tienen todas las mismas reglas que un número cuando se trata de orden de bytes. –