三種方法來進行轉換。(1) 在.NET Framework類庫的System名字空間中有個叫做BitConverter的類,它是專門用來進行這種轉換的。
主要方法:
1> GetBytes()方法 可以將大多數的簡單類型轉化為byte[];
2> ToInt()/ToString()等方法 用來將一個byte[]轉換成一個基本類型(primitive type)
注意:BitConverter類的行為取決於硬件架構(代碼在該硬件架構上運行)的字節順序(endianness)。
如果你將bit保存為可以在許多不同平台上讀取的一個文件格式,那么就會出問題。BitConverter有一個公有的IsLittleEndian字段,你可以查看它是如何運行的,但遺憾的是,你並不能改變它。
(2) 通過手動位移(bit shifting)來進行轉換:
b = new byte[] {0xfe,0x5a,0x11,0xfa};
u = (uint)(b[0] | b[1] << 8 |
b[2] << 16 | b[3] << 24);
b[0] = (byte)(u);
b[1] = (byte)(u >> 8);
b[2] = (byte)(u >> 16);
b[3] = (byte)(u >> 24);
用這種方法就可以避免字節順序問題,因為可以完全控制字節的位置。但是比較麻煩
(3) 如果不介意用不安全的代碼——可以通過直接的內存拷貝來實現轉換,把一個指向byte array的指針(pointer)轉換成一個指向integer類型的指針,然后取它的值(dereference):unsafe
{
fixed ( byte* pb = b )
u = *((uint*)pb);
}
同BitConverter一樣,這個方法的運行結果取決於代碼在何種硬件上運行。
如果要進行很多這種轉換,比如說在一個循環中,而且想得到最佳性能,那么建議用最后兩種方法中的一種。BitConverter有些慢,盡管區別不大。