TODO:位元組序的一些理解

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

TODO:位元組序的一些理解


本文是小編對位元組序的片面理解,希望對你有協助哈。

位元組序,即位元組在電腦中存放時的序列與輸入(輸出)時的序列是先到的在前還是後到的在前。

1.Little endian:將低序位元組儲存在起始地址,俗稱小端

2.Big endian:將高序位元組儲存在起始地址,俗稱大端

比如一個0x01020304(左高右低)這個整數,在小端下在記憶體中的布局如下

[04][03][02][01] 注意左邊是低地址,而右邊是高地址

在大端下則是

[01][02][03][04] 注意左邊是高地址,而右邊是低地址。

比較大端,小端的排序,採用大端方式儲存資料是比較符合人類的思維習慣。

因為網上有些人對大端,小端的認識不一樣;等下小編會寫一段golang的代碼來論證小端,大端排序的正確性。

網路位元組序,是指網路傳輸的位元組序,可能是大端序或者小端序,取決於軟體開始時通訊雙方的協議規定。TCP/IP協議RFC1700規定使用“大端”位元組序為網路位元組序,開發的時候需要遵守這一規則。

在現有的平台上Intel的X86採用的是Little-Endian,而像Sun的SPARC採用的就是Big-Endian。在C語言中,預設是小端(在有些單片機的實現中是基於大端,比如Keil 51C),Java是平台無關的,預設是大端,golang也是預設使用大端。不同語言各自採用不同的位元組序,相互之間的傳遞需要進行位元組序的轉換工作。

最後,附上Golang對大小端的測試代碼


輸出:

a: 305419896

BigEndian: 12 34 56 78

b: 305419896

c: 305419896

tt: 0x12345678

//tt輸出0x123456,則表示Go使用大端。如果需要對小端測試只要把BigEndian改成LittleEndian即可,有興趣可以試試。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.