2012-10-25

C# byte array 和變數之間的轉換

C# 將字串或數字轉成 Byte Array 或是將 Byte Array 轉回字串或數字,這是在檔案讀寫或是網路封包傳送/接收時可能會用到的功能,底下是轉換的範例:
//資料轉成 byte
static byte[] c2b()
{
    List<byte> myPacket = new List<byte>();
 
    string str ="hello world";
 
    //取得字串 byte 長度
    int nByteCt =System.Text.UTF8Encoding.UTF8.GetByteCount(str);
 
    //寫入字串長度及字串
    myPacket.AddRange(BitConverter.GetBytes((Int32)nByteCt));
    myPacket.AddRange(System.Text.UTF8Encoding.UTF8.GetBytes(str));
 
    //直接寫入 byte data
    myPacket.Add((byte)77);
 
    //寫入整數及單精度浮點數
    myPacket.AddRange(BitConverter.GetBytes((Int32)79927));
    myPacket.AddRange(BitConverter.GetBytes((float)12345.678f));
 
    return myPacket.ToArray();
}
 
//byte 轉成資料
static void c2d(byte[] data)
{
    //讀取字串 byte 長度
    int nByteCt =BitConverter.ToInt32(data, 0); //4bytes
 
    //讀取字串
    string str = System.Text.UTF8Encoding.UTF8.GetString(data, 4, nByteCt);
 
    //直接讀取 byte data
    int byteval = (int)data[4 + nByteCt]; //1byte
 
    //讀取整數及單精度浮點數
    int val0 = BitConverter.ToInt32(data, 4 + nByteCt + 1); //4bytes
    float val1 = BitConverter.ToSingle(data, 4 + nByteCt + 1 + 4);
}
 
//測試
static void Main(string[] args)
{
    c2d(c2b());
}