2009-08-21 226 views
9

如果我宣佈C#標誌枚舉字大小

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

有沒有一種方法來確定/字節集,這枚舉佔用了多少?另外,它最終會以什麼字節順序? (例如,我必須做一個HostToNetwork()來正確地通過線路發送它嗎?)另外,爲了調用HostToNetwork,我可以將其轉換爲字節數組並迭代嗎?

+3

無需這是社會的維基。這是一個標準問題。 – Noldorin 2009-08-21 23:13:52

+0

您可以使用'BitConverter.IsLittleEndian'來檢查系統的永久性,並作出相應的反應。 – Thorarin 2009-08-21 23:27:27

+0

標誌不應該有0值,除非它真的意味着「無」。 – 2009-08-22 08:17:30

回答

6

完整的答案是:

  • 有沒有一種方法來確定/字節集,這枚舉佔用了多少?

是:

[Flags] 
public enum MyColor : byte // sets the underlying type. 
{ 
    Red = 1; 
    Green = 2; 
    Blue = 4; 
    White = 8; 
    Magenta = 16; 
    ... (etc) 
} 
  • 此外,什麼字節順序將它結束了?

無論它被編譯進去,對我來說,x86(很少)。

  • 另外,爲了調用HostToNetwork,我可以將其轉換爲字節數組並迭代嗎?

這是棘手的地方。我發現了幾件事情:

+0

另外,你可以通過'Enum.GetUnderlyingType(typeof(MyColor))獲得基礎類型':http://msdn.microsoft.com/en-us/library/system.enum.getunderlyingtype.aspx – 2009-08-25 22:57:13

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

不可能直接設置字節順序。您可以使用一些精心設計的數字模擬小端系統上的大端字節。不過,我總是使用顯式的API來轉換字節順序。

+4

作爲參考,如果未指定默認大小是Int32,並且在引擎蓋下的標準數字與字節順序時的數字具有相同的規則。 – 2009-08-21 23:14:17