日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是Little Endian和Big Endian?(Endianness:字节序、端序、尾序)

發(fā)布時間:2024/1/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是Little Endian和Big Endian?(Endianness:字节序、端序、尾序) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

緬懷先驅(qū):提出字節(jié)序概念的以色列裔計算機科學(xué)家Danny Cohen1,于2019-08-22病逝,享年81歲2

目錄

  • 名詞釋義
  • 概念由來
  • 設(shè)計原理
  • 應(yīng)用場景
    • NBO(Net Bytes Order)
    • HBO(Host Bytes Order)

名詞釋義

Endianness譯作字節(jié)順序,又稱端序、尾序、尾端序。目前主要在存儲或者網(wǎng)絡(luò)傳輸場景中,用于約定多字節(jié)數(shù)據(jù)的存儲或發(fā)送順序。

字節(jié)順序有兩種格式:

  • LITTLE-ENDIAN:小字節(jié)序,又稱低字節(jié)序、小端序、小尾序、小尾端
    可速記為:高位高存
  • BIG-ENDIAN:大字節(jié)序,又稱高字節(jié)序、大端序、大尾序、大尾端
    可速記為:高位低存

概念由來

計算機中數(shù)據(jù)都是按字節(jié)表達、每個字節(jié)固定8 bit。當(dāng)數(shù)據(jù)較長時,我們會用多個字節(jié)來表示數(shù)據(jù),如int數(shù)值需要4個字節(jié)。

多個字節(jié)要存儲或者網(wǎng)絡(luò)傳輸時,調(diào)用方/發(fā)送方和存儲器/接收方勢必要約定一個相同的順序,才能保證數(shù)據(jù)的含義能被對方正確理解。

比如0xb1b2b3b4這個16進制的int值,一共4個字節(jié)。如果發(fā)送時按照0xb1、0xb2、0xb3、0xb4的順序發(fā)送,而接收時認為發(fā)送方是按相反順序返送,則會任務(wù)接收到的數(shù)據(jù)是0xb4b3b2b1,這就出現(xiàn)理解不一致。

在早期的計算機體系結(jié)構(gòu)中,因為多字節(jié)存儲和傳輸順序并沒有統(tǒng)一規(guī)則,上面的場景經(jīng)常出現(xiàn),尤其是網(wǎng)絡(luò)通信非常困難。而對“網(wǎng)絡(luò)傳輸中哪種字節(jié)排序更合適”的爭論一時沸反盈天,已經(jīng)脫離技術(shù)本身的考慮,實際的情況卻遲遲得不到改善。

Danny Cohen認為:技術(shù)角度并不關(guān)心選擇哪種字節(jié)順序,重要的是行業(yè)需要統(tǒng)一的標(biāo)準(zhǔn)、大家堅持下去。于是在1980年由IETF發(fā)表的《論圣戰(zhàn)與和平訴求》(On Holy Wars and a Plea for Peace)一文中,他引用了《格列佛游記》中的典故,并使用類似文中概念的little-endian和big-endian,分別表示小端序和大端序。自此這個概念被廣泛采用。

Endianness詞根Endian出自Jonathan Swift的《格列佛游記》,原文如下:

“…我下面要告訴你的是,Lilliput和Blefuscu這兩大強國在過去的三十六個月里一直在苦戰(zhàn)。戰(zhàn)爭開始時由于一下原因:我們大家都認為,吃雞蛋前,原始的方法是打破雞蛋較大的一端(big-end),可是當(dāng)今皇帝的祖父小時候吃雞蛋,一次按古法打雞蛋時碰巧將一個手指弄破了,因此他的父親,當(dāng)時的皇帝,就下了一道赦令,命令全體臣民吃雞蛋是打破雞蛋較小的一端(little-end),違令者重罰。老百姓們對這項命令極為反感。歷史告訴我們,由此曾發(fā)生過六次叛亂,其中一個皇帝送了命,另一個丟了王位。這些判斷大多都是由Blefuscu的王國大臣們煽動起來的。叛亂平息后,流亡的人總是逃到那個帝國區(qū)尋求避難。據(jù)統(tǒng)計,先后幾次有一萬一千人情愿受死也不肯去打破雞蛋較小的一端。關(guān)于這一爭端,曾出版過幾百本大部著作,不過大端派(big-endians)的書一直是受禁的,法律也規(guī)定該派的任何人不得做官。"

雞蛋從哪頭打破,怎么會有哪種更合適呢?對個人生活和社會發(fā)展又有什么意義呢?Swift寫這段故事,其實是諷刺當(dāng)時法國和英國的時政,認為真正重要的事情得不到關(guān)注、而在一些毫無意義的事情上爭論不休。

這就是大端序和小端序的由來。下面介紹下兩種排序的具體原理。

設(shè)計原理

我們假設(shè)有一個int值0xb1b2b3b4(0x前綴代表16進制,共4個字節(jié)),要存入0x0000開頭的內(nèi)存地址(實際地址比這個要長,這里僅用作演示)。

那么兩種規(guī)則的存放方式對比如下:

規(guī)則內(nèi)存
0x0000內(nèi)存
0x0001內(nèi)存
0x0002內(nèi)存
0x0003
big-endian0xb10xb20xb30xb4
little-endian0xb40xb30xb20xb1

上表體現(xiàn)了大端序和小端序的形式和區(qū)別,可以概括如下:

  • big-endian:高位字節(jié)存儲在內(nèi)存低位,簡單理解為高(大)位字節(jié)(高位代表2的更大指數(shù),數(shù)值也更大)先出現(xiàn)。
  • little-endian:高位字節(jié)存儲在內(nèi)存高位,簡單理解為低(小)位字節(jié)先出現(xiàn)。

應(yīng)用場景

NBO(Net Bytes Order)

網(wǎng)絡(luò)字節(jié)序,普遍理解為TCP/IP協(xié)議中使用的字節(jié)序。
Danny Cohen當(dāng)時確定的就是網(wǎng)絡(luò)層面的字節(jié)序規(guī)則,最終TCP/IP各層協(xié)議統(tǒng)一采用Big-Endian。

HBO(Host Bytes Order)

個人對處理器不甚了解,以下文字來自網(wǎng)絡(luò)。

在現(xiàn)代“馮.諾依曼體系結(jié)構(gòu)”的計算機中,數(shù)據(jù)都是采用二進制來存儲、以字節(jié)(Byte)為單位、每個字節(jié)包含8位二進制數(shù)字(8 bits)。
目前有兩大陣營,那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用Big-Endian方式存儲數(shù)據(jù),而x86系列則采用Little-Endian方式存儲數(shù)據(jù)。


大端和小端的形成有其歷史原因,我們在理解的基礎(chǔ)上,要明白發(fā)展才是硬道理。
得益于高級語言的發(fā)展,在現(xiàn)在的軟件開發(fā)基本不需關(guān)心字節(jié)序(除非是socket編程),如Java這類跨平臺移植的語言由虛擬機屏蔽了字節(jié)序問題。

JAVA虛擬機中多字節(jié)類型數(shù)據(jù)的存放順序,也就是JAVA字節(jié)序是Big-Endian。
可參考資料:

  • https://www.cnblogs.com/Alandre/p/4878841.html
  • https://www.cnblogs.com/thbCode/p/6018308.html

以上就是對little-endian和big-endian的全部介紹。

內(nèi)存對齊有興趣的朋友,可參考下面文章:

  • https://www.cnblogs.com/leezhm/archive/2011/07/19/2110864.html
  • https://www.cnblogs.com/thbCode/p/6018308.html

待更新:

  • 為什么一個字節(jié)定義為8 bit,定義長一些、足夠存儲最大的數(shù)據(jù)不就行了嗎?
  • Java處理字節(jié)序的具體實現(xiàn)是怎么,如何將bit/byte輸出為最終數(shù)據(jù)?
  • 開發(fā)中常見的數(shù)據(jù)檢索、內(nèi)存匹配等操作,是如何進行的、字節(jié)序如何運作?

  • https://en.wikipedia.org/wiki/Danny_Cohen_(computer_scientist) ??

  • https://www.oschina.net/news/109269/danny-cohen-has-died ??

  • 總結(jié)

    以上是生活随笔為你收集整理的什么是Little Endian和Big Endian?(Endianness:字节序、端序、尾序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。