2011-12-03 53 views
2

Normaly如果你想例如佔5字節數組它會像水木清華{} 0x00,0x00,0x00,0x05但BitConverter給了我相反的數組({} 0x05,0x00,0x00,0x00) 爲什麼它是如此,我哪裏錯了?C#BitConverter問題

+1

http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx大VS小端? –

回答

3

很可能是您處於小端架構(這是常見x86和x86-64架構的情況)。您可以使用BitConverter.IsLittleEndian屬性進行驗證。 在這樣的結構中,至少顯著字節至上,這解釋了爲什麼

BitConverter.GetBytes(5) 

產生

{ 0x05, 0x00, 0x00, 0x00 } 

你當然可以,如果基於系統/目標需要扭轉陣列字節順序。你可以找到這樣一個EndianBitConverter列出here

+0

謝謝ansvers!現在每件事情都很清楚 –

0

我寫了下面的包裝類來處理期望Little Endien的BitConverter的情況。

public static Int16 ToInt16(byte[] data, int offset) 
    { 
     if (BitConverter.IsLittleEndian) 
     { 
      return BitConverter.ToInt16(BitConverter.IsLittleEndian ? data.Skip(offset).Take(2).Reverse().ToArray() : data, 0); 
     } 
     return BitConverter.ToInt16(data, offset); 
    } 

    public static Int32 ToInt32(byte[] data, int offset) 
    { 
     if (BitConverter.IsLittleEndian) 
     { 
      return BitConverter.ToInt32(BitConverter.IsLittleEndian ? data.Skip(offset).Take(4).Reverse().ToArray() : data, 0); 
     } 
     return BitConverter.ToInt32(data, offset); 
    } 

    public static Int64 ToInt64(byte[] data, int offset) 
    { 
     if (BitConverter.IsLittleEndian) 
     { 
      return BitConverter.ToInt64(BitConverter.IsLittleEndian ? data.Skip(offset).Take(8).Reverse().ToArray() : data, 0); 
     } 
     return BitConverter.ToInt64(data, offset); 
    }