2010-10-15 56 views
1

有沒有比使用BitConverter寫更好的方法?C#:手動位轉換?

public static class ByteArrayExtensions 
{ 

    public static int IntFromUInt24(this byte[] bytes) 
    { 
     if (bytes == null) 
     { 
      throw new ArgumentNullException(); 
     } 

     if (bytes.Length != 3) 
     { 
      throw new ArgumentOutOfRangeException 
       ("bytes", "Must have length of three."); 
     } 

     return BitConverter.ToInt32 
        (new byte[] { bytes[0], bytes[1], bytes[2], 0 }, 0); 
    } 

} 
+0

您可以使用位移運算符'<<'移動字節[0-2]的值。 – davisoa 2010-10-15 21:55:04

+0

http://stackoverflow.com/questions/3559183/reading-an-unsigned-24-bit-integer-from-ac-stream – 2010-10-15 22:07:04

回答

3

我會使用:

return bytes[2]<<16|bytes[1]<<8|bytes[0]; 

小心字節序:此代碼只能與小端24位的數字作品。

另一方面,BitConverter使用本地字節順序。所以你的可能不適用於所有的大端系統。

+0

雖然轉移可能會更快(我不知道),'BitConverter'更具可讀性,那麼它將取決於「更好」側重於哪個方面。 – 2010-10-15 21:56:24

+1

如果它是一個32位數字,我可能也會使用BitConverter。但是由於24位數字已經需要擺弄,BitConverter不是更易讀的IMO。 – CodesInChaos 2010-10-15 21:59:11

+0

如果BitConverter使用native endianness,那麼BitConverter是不是可以在大端和小端機器上工作,而你的答案只能在小端機器上工作? – GoHeavyOrGoHome 2010-10-15 22:28:40