天天看點

網絡位元組序and主機位元組序

不同的CPU對整數的存儲有着不同的方式,也就是指直接序,

 little-endian位址低位存儲整數的低位 ,位址高位存整數的高位    如:無符号16位整數 5用二進制表示為:0000 0000 0000 0101

big-endian    位址低位存儲整數的高位 ,位址高位存整數的低位    如:無符号16位整數 5用二進制表示為:0000 0101 0000 0000

在網絡傳輸過程中,如果機器間的位元組序不同就會導緻資料傳輸錯誤那麼就要轉換下位元組序

下面給個簡單的方法

public override void Write(ulong value)
        {
            uint height = (uint)((value & 0XFFFFFFFF00000000) >> 32);//取出高16位
            uint low = (uint)(value & (ulong)0X00000000FFFFFFFF);//取出低16位
            Write(low);//先寫入低16位
            Write(height);//再寫入高16位
        }

 public override long ReadInt64()
        {
            long height = (long)ReadInt32();//先讀取高16位
            long low = (long)ReadInt32();//再讀取低16位
            low = low << 32;//低16位放到高位
            return height | low;//算出變換後的值
        }