判斷.net中在windows系統下的位元組序

來源:互聯網
上載者:User

標籤:

  位元組序,是指位元組在記憶體中的儲存順序。其又分為大端位元組(Big-Endian)序和小端位元組序(Little-Endian)。

  以下摘自百度百科:

  a) Little-Endian就是低位位元組排放在記憶體的低地址端,高位位元組排放在記憶體的高地址端。

  b) Big-Endian就是高位位元組排放在記憶體的低地址端,低位位元組排放在記憶體的高地址端。

  什麼意思呢?

  我們有一個int32的值:16909060,它的二進位表示方式是:0000 0001,0000 0010,0000 0011,0000 0100 (為了方便觀看,我加了‘,‘號)

  那麼,在記憶體中我們需要4個位元組來儲存這個整型數值。假設需要的記憶體位址為:0x00000001,0x00000002,0x00000003,0x00000004

  對於小端位元組序,它的存放順序為:

 

0x00000001 0x00000002 0x00000003 0x00000004
0000 0100 0000 0011 0000 0010 0000 0001

  對於大端位元組序,它的存放順序為:

0x00000001 0x00000002 0x00000003 0x00000004
0000 0001 0000 0010 0000 0011 0000 1000

  那麼,在.net中是採用哪種位元組序呢?

  先下結論:.net在記憶體中採用的是Little-Endian。 

  測試原理:利用 Buffer.BlockCopy 方法將一個int32位的值複製到int16值中。 Buffer.BlockCopy  方法將指定的count個數組從src複製到dst,並能指定開始複製的位移位置。BlockCopy 方法使用記憶體的位移量訪問 src 參數數組中的位元組,而不是使用索引或數組上下限等編程構造。注意,是記憶體的位移量,即該方法是從記憶體中一個一個位元組的複製值,而不是直接複製數值結構

  以下是原始碼:

 1           var sours = new int[] { 175 }; 2             var dest = new short[1]; 3             var sp = 0; //源序列位移地址 4             var dp = 0; //目標位置位移地址 5             var count = 2; //一次拷貝位元組數 6  7             Buffer.BlockCopy(sours, sp, dest, dp, count); 8             foreach (var i in dest) 9             {10                 Console.WriteLine(i);11             }    

  結果輸出:175.

  代碼裡一次複製2個位元組,整好是一個int16所需要的位元組大小。而源數組的起始位移量是0.如果我們把sp的值改成2,即位移2個位元組,最後的輸出就變成了0.這是因為175的高位位元組是0000 0000,0000 0000,他存放在記憶體的高地址中。

 

判斷.net中在windows系統下的位元組序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.