小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

理解大端與小端字節(jié)序

 herowuking 2015-06-06

字節(jié)順序是令人惡心的一個(gè)問題。我想說一下我在這方面難過的經(jīng)歷。這里是關(guān)鍵:

  • 問題:電腦如何像人一樣讀取不同的語言
    • 有些時(shí)候?qū)憯?shù)據(jù) "從左到右" 有些時(shí)候是 "從右到左".
    • 一臺(tái)機(jī)器能正確讀取自己的數(shù)據(jù)。問題發(fā)生在當(dāng)計(jì)算機(jī)上的存儲(chǔ)數(shù)據(jù)需要不同的讀取類型時(shí)候。
  • 解決方案
    • 統(tǒng)一一個(gè)通用格式 (i.e.,所有網(wǎng)絡(luò)流都是單一的格式 ), 或
    • 一直包括一個(gè)數(shù)據(jù)頭,用來描述數(shù)據(jù)格式。當(dāng)計(jì)算機(jī)讀取到數(shù)據(jù)頭的時(shí)候,數(shù)據(jù)頭會(huì)告訴計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)在其他格式中,需要被轉(zhuǎn)換后才能讀取。
你要爪子
你要爪子
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

數(shù)字與數(shù)據(jù)

一個(gè)很重要的概念就是識(shí)別數(shù)字與代表數(shù)字的數(shù)據(jù)的區(qū)別。

數(shù)字是一個(gè)抽象的概念,如某物的總和。你擁有十個(gè)手指。“十”這個(gè)概念不會(huì)改變,無論你利用何種形式展現(xiàn),ten,10,diez(西班牙語),ju(日語),1010(二進(jìn)制),X(羅馬數(shù)字)...這些形式都指向同一個(gè)概念“十”。

相比而言,數(shù)據(jù)是一個(gè)物理概念,一串存儲(chǔ)于計(jì)算機(jī)中的位與字節(jié)。數(shù)據(jù)沒有內(nèi)在的意義,不同的讀取對(duì)象賦予其不同的解釋。

數(shù)據(jù)如人類的寫作一樣,只是簡(jiǎn)單地書寫在紙上。它們可以是字母“IO”,木星的衛(wèi)星,古希臘女神,或?yàn)檩斎?輸出的縮寫,亦或?yàn)槟橙说氖讋?chuàng),二進(jìn)制中的數(shù)字2(“10”)。數(shù)據(jù)展現(xiàn)的意義具有無限可能。

sonja
sonja
翻譯于 2年前

2人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

關(guān)鍵點(diǎn)在于一份數(shù)據(jù)可以有多種解釋,直到有人明確作者的初衷,該數(shù)據(jù)的意思才被正確解析。

計(jì)算機(jī)也面臨同樣的問題。他們存儲(chǔ)數(shù)據(jù),非抽象的概念,而是通過一序列的1和0方式進(jìn)行操作。之后,他們通過讀取這些1和0形成的原始數(shù)據(jù)創(chuàng)建抽象的新概念。基于假設(shè)條件,這些1和0具有不同的意義。

為何這些問題會(huì)產(chǎn)生呢?那是因?yàn)槲覀儧]有規(guī)定所有的計(jì)算機(jī)必須使用同一種語言,就如我們?nèi)祟愐粯?。任何一種計(jì)算機(jī)需保持內(nèi)部統(tǒng)一,即可識(shí)別其自己的數(shù)據(jù),然而其他計(jì)算機(jī)如何解析該計(jì)算的數(shù)據(jù)并未保證。

基本概念

  • 數(shù)據(jù)(位,字節(jié),或紙上標(biāo)識(shí))是無意義的;它必須通過創(chuàng)建抽象概念,如數(shù)字,來展現(xiàn)其意義;
  • 計(jì)算機(jī)如人類一樣擁有不同的渠道去存儲(chǔ)相同的抽象概念。(如:我們可以通過不同的形式去展現(xiàn)“十”這個(gè)概念,ten, 10, diez等)
sonja
sonja
翻譯于 2年前

1人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

把數(shù)字存儲(chǔ)為數(shù)據(jù)

慶幸的是,大多數(shù)計(jì)算機(jī)都認(rèn)可一些基本的數(shù)據(jù)格式 (但并不總是這樣). 這給了我們一個(gè)同樣的入口點(diǎn),從而讓我們的生活更簡(jiǎn)單:

  • 一位可以有兩個(gè)取值(開或管,1或0)
  • 一個(gè)字節(jié)是一個(gè)八位的序列
    • 每個(gè)字節(jié)中最左端的一位是最大的. 所以二進(jìn)制序列00001001就是十進(jìn)制里面的數(shù)字9. 00001001 = (23 + 20 = 8 + 1 = 9).
    • 位的編號(hào)是從右到左的.第0位在最右邊也是最小的;第7位在最左邊,是最大的.

我們可以依據(jù)這些最基本的協(xié)議作為構(gòu)建單元來傳輸數(shù)據(jù). 如果我們每次存儲(chǔ)或讀取一個(gè)字節(jié),那么在所有計(jì)算機(jī)上都是可行的.字節(jié)的概念在所有計(jì)算機(jī)中都是一樣的 . 計(jì)算機(jī)也認(rèn)可你發(fā)送給他們的字節(jié)的順序-- 它們認(rèn)可哪個(gè)字節(jié)是第一個(gè),第二個(gè),第三個(gè)等等. 所以第三十五個(gè)字節(jié)在所有機(jī)器上的解釋都是一樣的.

那,問題是什么呢?計(jì)算機(jī)都認(rèn)可一個(gè)字節(jié),對(duì)嗎?

好吧,對(duì)于單字節(jié)的數(shù)據(jù)來說這是沒問題的,比如ASCII文本. 然而,很多數(shù)據(jù)需要使用多個(gè)字節(jié)來存儲(chǔ),比如整數(shù)或者浮點(diǎn)數(shù). 而對(duì)于這些字節(jié)的存儲(chǔ)順序是沒有統(tǒng)一的協(xié)議的.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

以字節(jié)為例子

設(shè)想一個(gè)包含4個(gè)字節(jié)的序列,其中的元素分別被命名為W X Y和Z - 我沒有將它們命名為A B C D是因?yàn)樗鼈兪?6進(jìn)制的數(shù)字,那樣的話可能會(huì)引起混淆.所以,每一個(gè)字節(jié)都代表一個(gè)值,而且都是由8位組成。

 Byte Name:    W       X       Y       Z
 Location:     0       1       2       3
 Value (hex):  0x12    0x34    0x56    0x78

例如, W 是一整個(gè)字節(jié), 在16進(jìn)制中表示為0x12,在二進(jìn)制中表示為00010010.如果W被解析為數(shù)字,么在十進(jìn)制中是"18"  (順便說一下, 沒有什么要求我們必須把它解釋成數(shù)字 - 它可以是一個(gè)ASCII字符或者別的東西 ).

跟上我了嗎? 我們有四個(gè)字節(jié)W X Y 和Z, 每一個(gè)字節(jié)都有一個(gè)不同的值.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

理解指針

指針是編程中很關(guān)鍵的一部分, 特別是在C語言中. 指針是一個(gè)指向內(nèi)存地址的數(shù)字,這個(gè)數(shù)字的解釋是由我們(編程人員)決定的 (the programmer) .

在C語言中, 當(dāng)你把一個(gè)指針映射 (轉(zhuǎn)換)成某種類型 (比如一個(gè)char * 或者int *),它將告訴計(jì)算機(jī)如何解釋位于那個(gè)地址的數(shù)據(jù). 舉個(gè)例子,讓我們定義

void *p = 0; // p is a pointer to an unknown data type
             // p is a NULL pointer -- do not dereference
char *c;     // c is a pointer to a single byte

注意,我們不能根據(jù)p獲取數(shù)據(jù)因?yàn)槲覀儾恢浪念愋? p 可以指向一個(gè)數(shù)字,一個(gè)字母,一個(gè)字符串的開始, 你的星座, 一張圖片 -- 我們不知道需要讀取多少字節(jié),也不知道那里到底有什么.

現(xiàn)在假設(shè)我們這樣寫

c = (char *)p;
ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

啊-- 現(xiàn)在這條語句告訴計(jì)算機(jī)指向跟p相同的位置, 并且將數(shù)據(jù)解釋成為一個(gè)字符 (1 byte).這種情況下, c可以指向內(nèi)存地址0, 或者字節(jié)W.如果我們輸出c, 我們將獲得W處的值, 也就是十六進(jìn)制的0x12 (記住W是一個(gè)完整的字節(jié)).

這個(gè)例子不依賴于我們擁有的計(jì)算機(jī)的類型 -- 另外, 所有的計(jì)算機(jī)都認(rèn)同字節(jié)這個(gè)東西 (在過去可不是這樣).

這個(gè)例子很有意義,即使對(duì)于所有的計(jì)算機(jī)來說這都一樣 -- 如果我們有一個(gè)指向單獨(dú)一個(gè)字節(jié)的指針 (char *,單個(gè)字節(jié)), 我們就可以遍歷整個(gè)內(nèi)存, 每次讀取一個(gè)字節(jié). 我們可以檢查任何一個(gè)內(nèi)存地址,而計(jì)算機(jī)的大端還是小端并不影響--每一臺(tái)計(jì)算機(jī)都會(huì)返回同樣的信息.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

那,問題在哪兒呢?

當(dāng)計(jì)算機(jī)嘗試讀取多個(gè)字節(jié)的時(shí)候問題就出現(xiàn)了. 一些數(shù)據(jù)類型包含多個(gè)字節(jié),比如長(zhǎng)整形或者浮點(diǎn)型數(shù)字.一個(gè)字節(jié)只能表示256個(gè)值, 所以能存儲(chǔ)0-255.

現(xiàn)在問題來了 - 當(dāng)你讀取多個(gè)字節(jié)的時(shí)候,最大的字節(jié)在哪兒?

  • 大端機(jī): 存儲(chǔ)數(shù)據(jù)的時(shí)候大端在前. 當(dāng)查找多個(gè)字節(jié)的時(shí)候,第一個(gè)字節(jié)(地址最小的)是最大的.
  • 小端機(jī): 存儲(chǔ)數(shù)據(jù)的時(shí)候小端在前. 當(dāng)查找多個(gè)字節(jié)的時(shí)候,第一個(gè)字節(jié)是最小的.

命名很有意義,對(duì)吧? 大端機(jī)認(rèn)為大端在最前面. (順便說一下,大端 /小端的命名來自格列佛游記,那里面的Lilliputans爭(zhēng)論到底是從大的一端打破雞蛋還是從小段一端. 有時(shí)候電腦爭(zhēng)論也是同樣有意義的 )

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

再回過來,當(dāng)只有一個(gè)字節(jié)的時(shí)候,大端還是小端并不重要. 如果只有一個(gè)字節(jié),它是你唯一讀取的數(shù)據(jù),所以只有一種解釋它的辦法 (因?yàn)橛?jì)算機(jī)都認(rèn)可一個(gè)字節(jié)代表的值).

現(xiàn)在假設(shè)我們的四個(gè)字節(jié) (W X Y Z) 在大端機(jī)和小端機(jī)上以同樣的方式存儲(chǔ). 就是說,兩臺(tái)機(jī)器上內(nèi)存地址為0的位置都是W,內(nèi)存地址為1的位置都是X,以此類推.

我們可以通過記住字節(jié)是與機(jī)器無關(guān)的來制造這樣的順序. 我們可以游走整個(gè)內(nèi)存,每次一個(gè)字節(jié),然后設(shè)置我們需要的值.這在任何機(jī)器上都是行得通的:

c = 0;     // point to location 0 (won't work on a real machine!)
*c = 0x12; // Set W's value
c = 1;     // point to location 1
*c = 0x34; // Set X's value
...        // repeat for Y and Z; details left to reader

上面的代碼在任何機(jī)器上都是可行的,而且我們把兩臺(tái)機(jī)器都設(shè)置了字節(jié),W,X,Y,Z分別位于內(nèi)存地址0,1,2,3的位置.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

解析數(shù)據(jù)

現(xiàn)在讓我們以多字節(jié)數(shù)據(jù)舉一個(gè)例子 (終于講多字節(jié)了!). 快速?gòu)?fù)習(xí): 短整型是一個(gè)兩個(gè)字節(jié)的數(shù)字, 取值范圍為0-65535 (如果是無符號(hào)的). 讓我們?cè)谝粋€(gè)例子中使用它:

short *s; // pointer to a short int (2 bytes)
s = 0;    // point to location 0; *s is the value

所以,s是一個(gè)指向短整型的指針,而且現(xiàn)在指向位于0地址的字節(jié)(0字節(jié)存放了W),如果我們讀取s處的值將會(huì)發(fā)生什么?

  • 大端機(jī):我認(rèn)為一個(gè)短整型是兩個(gè)字節(jié),所以我將把它們讀完: s位置是地址0 (W, o或者0x12)然后s+1的位置是1 (X, 或者 0x34). 既然第一個(gè)字節(jié)是最大的 (我是大端機(jī)!), 那這數(shù)字一定是256 * 字節(jié) 0 + 字節(jié)1,或者 256*W + X,或 0x1234. 我把第一個(gè)字節(jié)乘以256 (2的8次方)因?yàn)槲倚枰?位.
  • 小端機(jī): 我不知道大端機(jī)先生在說什么.我同意短整型是兩個(gè)字節(jié),我也向他一樣把它們讀完: s位置是0x12, s + 1的位置是is 0x34. 但在我的世界里,第一個(gè)字節(jié)是最小的! 這個(gè)短整型的值是字節(jié) 0 + 256 *字節(jié)1, 或256*X + W, 或0x3412.

記住,兩臺(tái)機(jī)器都從s位置開始向前讀取內(nèi)存. 對(duì)于0地址和1地址代表這個(gè)問題沒有任何疑問,對(duì)于短整型占兩個(gè)字節(jié)這個(gè)問題也沒有任何疑問.

但你發(fā)現(xiàn)問題了嗎? 大端機(jī)認(rèn)為 s = 0x1234 而t小端機(jī)認(rèn)為 s = 0x3412.同樣的數(shù)據(jù)卻得到兩個(gè)不同的數(shù)字,這不太會(huì)是什么好事情.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

2人頂

 翻譯的不錯(cuò)哦!

其它翻譯版本(1)

另一個(gè)例子

讓我們使用四個(gè)字節(jié)的整型為例子來“娛樂”一下:

int *i; // pointer to an int (4 bytes on 32-bit machine)
i = 0;  // points to location zero, so *i is the value there

同樣我們也會(huì)問:i的值是什么?

  • 大端機(jī): 一個(gè)整型占4個(gè)字節(jié), 第一個(gè)字節(jié)是最大的.我讀取四個(gè)字節(jié)(W X Y Z) ,W 是最大的. 結(jié)果是0x12345678.
  • 小端機(jī): 沒錯(cuò),一個(gè)整型占4個(gè)字節(jié),但第一個(gè)是最小的.我也讀取 W X Y Z, 但 W 卻完全相反--它是最小的. 結(jié)果是 0x78563412.

同樣的數(shù)據(jù),不同的結(jié)果--不是什么好事. 這里有一個(gè)使用上面的數(shù)字的互動(dòng)例子,你可以隨意添加你自己的:

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

1人頂

 翻譯的不錯(cuò)哦!

NUXI 問題

關(guān)于字節(jié)順序的問題有時(shí)候也被稱作NUXI問題: UNIX被保存在大端機(jī)上在小端機(jī)上將顯示為NUXI.

假設(shè)我們想把4個(gè)字節(jié) (U, N, I and X)作為兩個(gè)短整型存儲(chǔ): UN and IX. 每個(gè)字母代表一個(gè)字節(jié), 就像上面例子中的WXYZ. 要保存著兩個(gè)短整型,我們可以這樣寫:

short *s; // pointer to set shorts
s = 0;    // point to location 0
*s = UN;  // store first short: U * 256 + N (fictional code)
s = 2;    // point to next location
*s = IX;  // store second short: I * 256 + X

這部分代碼并不局限于機(jī)器.如果我們?cè)谝慌_(tái)機(jī)器上存儲(chǔ)"UN"然后又把它讀出來,結(jié)果最好是"UN"!我不關(guān)心端的問題,如果我們?cè)谝慌_(tái)機(jī)器上存儲(chǔ)了一個(gè)值,當(dāng)我們讀取的時(shí)候我們需要能夠獲取同樣的值.

然而,如果我們?cè)趦?nèi)存中一次讀取一個(gè)字節(jié) (使用我們的char * 伎倆), 順序就可能發(fā)生變化.在大端機(jī)上我們看到

Byte:     U N I X
Location: 0 1 2 3

這很有意義. U 在 "UN"中是最大的,而且被最先存儲(chǔ).對(duì)于IX也是一樣: I 是最大的,也被優(yōu)先存儲(chǔ)。

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

在小端機(jī)上我們可以看到

Byte:     N U X I
Location: 0 1 2 3

這也是有意義的. "N" 在"UN"中時(shí)最小的,所以被先存儲(chǔ). 而且,即使字節(jié)在內(nèi)存中是被”反向“存儲(chǔ)的,小端機(jī)知道它是小端的,所以當(dāng)讀取數(shù)據(jù)的時(shí)候也會(huì)正確的解析他們.另外, 注意,我們可以再任何機(jī)器上像x = 0x1234一樣指定16進(jìn)制數(shù).當(dāng)你寫0x1234的時(shí)候,小端機(jī)知道你的意思,它不會(huì)強(qiáng)制你讓你自己把值給倒過來(你指定了要寫的數(shù)字是16進(jìn)制的,它意識(shí)到這個(gè)細(xì)節(jié),然后再內(nèi)存中將字節(jié)顛倒過來,底層操作).

這種場(chǎng)景就被稱作"NUXI" 問題,因?yàn)樽止?jié)順序UNIX在其他類型的機(jī)器上會(huì)被解釋為NUXI . 另外,只有當(dāng)你交換數(shù)據(jù)的時(shí)候這才是個(gè)問題--每臺(tái)機(jī)器內(nèi)部是一致的.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

不同端機(jī)器之間交換數(shù)據(jù)

計(jì)算機(jī)是互聯(lián)的 - 那些一臺(tái)機(jī)器只需要關(guān)系讀取自己的數(shù)據(jù)的日子已經(jīng)不復(fù)存在了.大端機(jī)和小端機(jī)之間需要交流并且相處.他們是如何做的呢?

解決方案1: 使用通用的格式

最簡(jiǎn)單的方式就是認(rèn)可同樣的格式以達(dá)到在網(wǎng)絡(luò)上傳輸數(shù)據(jù)的目的. 標(biāo)準(zhǔn)的網(wǎng)絡(luò)傳輸順序?qū)嶋H上是大端在前, 但有些人覺得小端輸了就變得很傲慢...我們暫且把它叫做"網(wǎng)絡(luò)順序".

要把數(shù)據(jù)轉(zhuǎn)化成網(wǎng)絡(luò)順序, 計(jì)算機(jī)需要調(diào)用一個(gè)方法來轉(zhuǎn)換 (主機(jī)-到-網(wǎng)絡(luò)). 在大端機(jī)中,這不需要做任何事情,但現(xiàn)在我們不討論這個(gè)(小端機(jī)們可能會(huì)很抓狂).

但在傳輸數(shù)據(jù)之前進(jìn)行轉(zhuǎn)換是非常重要的, 即使你是大端機(jī).你的程序?qū)τ诓煌臋C(jī)器來說可能非常熟悉,但你想讓你的代碼更靈活(不是嗎?).

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

同樣的,也有一個(gè)轉(zhuǎn)換方法(網(wǎng)絡(luò)到主機(jī))被用來從網(wǎng)絡(luò)讀取數(shù)據(jù). 你需要用它來保證你能夠正確的將來自網(wǎng)絡(luò)的數(shù)據(jù)轉(zhuǎn)化成你主機(jī)的格式.你需要知道你接收的數(shù)據(jù)的類型才能正確的解碼,轉(zhuǎn)換方法在這里:

 htons()--"Host to Network Short"
 htonl()--"Host to Network Long"
 ntohs()--"Network to Host Short"
 ntohl()--"Network to Host Long"

記住:一個(gè)字節(jié)就是一個(gè)字節(jié),與順序沒有關(guān)系.

這些方法在進(jìn)行底層網(wǎng)絡(luò)編程的時(shí)候非常關(guān)鍵, 比如驗(yàn)證IP數(shù)據(jù)包中的校驗(yàn)和. 如果你不能正確的理解“端”的問題,你的生活將很苦逼 -在這方面需要記住我所講的. 使用轉(zhuǎn)換方法,并且知道為什么需要使用它們.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

解決方案2: 使用字節(jié)順序標(biāo)記 (BOM)

另一個(gè)辦法就是在每一組數(shù)據(jù)前面包含一個(gè)魔法數(shù)字,比如0xFEFF. I如果你讀到了魔法數(shù)字為0xFEFF, 那就是說讀取的數(shù)據(jù)跟你的機(jī)器采用同樣的格式,這樣一切就好辦了.

如果你讀到的魔法數(shù)字是0xFFFE (它是反向的), 那就意味著讀取的數(shù)據(jù)與你機(jī)器上的數(shù)據(jù)格式是不同的,你就需要進(jìn)行轉(zhuǎn)化.

有幾點(diǎn)需要注意. 首先, 魔法數(shù)字并不是真的具有魔法,但編程人員經(jīng)常使用這個(gè)說法來描述選擇的任意一個(gè)數(shù)字(BOM 可以是不同字節(jié)的任意序列). 它被稱作字節(jié)順序標(biāo)記是因?yàn)樗凳玖藬?shù)據(jù)存儲(chǔ)的時(shí)候使用的順序.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

其次, BOM增加了所有傳輸數(shù)據(jù)的開銷.即使你正在傳輸兩個(gè)字節(jié)的數(shù)據(jù),你也需要包含兩個(gè)字節(jié)的BOM.哎喲!

Unicode在存儲(chǔ)多字節(jié)數(shù)據(jù)的時(shí)候就使用BOM (有一些Unicode字符編碼會(huì)為每個(gè)字符使用兩個(gè),三個(gè)甚至四個(gè)字節(jié)). XML默認(rèn)把數(shù)據(jù)存儲(chǔ)成UTF-8格式從而避免了這個(gè)復(fù)雜的問題, UTF-8每次存一個(gè)字節(jié)的Unicode信息.為什么可以這么酷?

(第56次重申) "因?yàn)槎说膯栴}不會(huì)影響單個(gè)字節(jié)".

你是對(duì)的.

另外, 使用BOM也會(huì)存在其它問題. 如果你忘記包含BOM了怎么辦? 你會(huì)假設(shè)數(shù)據(jù)是按照你自己的格式傳輸?shù)膯?你會(huì)讀取數(shù)據(jù)并且檢查是否它看起來是”反向“(管它什么意思呢)的,然后將它進(jìn)行轉(zhuǎn)化嗎? 如果正常的數(shù)據(jù)碰巧就包含了BOM呢? 這些情況可不好玩.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

為什么會(huì)有端的問題呢?我們就不能和睦相處嗎?

啊,一個(gè)多么具有哲學(xué)意義的問題.

任何不同字節(jié)順序的系統(tǒng)都有它的優(yōu)點(diǎn).小端機(jī)讓你先讀取小字節(jié)數(shù)據(jù),從而無需讀取其他字節(jié).你可以非常容易地檢查一個(gè)數(shù)據(jù)是奇數(shù)還是偶數(shù)(最后一位是0),如果你有這樣的需求.大端機(jī)系統(tǒng)以與我們?nèi)祟愃季S一致的方式在內(nèi)存中存儲(chǔ)數(shù)據(jù)(從左到右),這就使得底層的調(diào)試變得簡(jiǎn)單.

為什么我們不都認(rèn)可一種系統(tǒng)呢? 為什么要嘗試這么多的計(jì)算機(jī)還有這么多的區(qū)別呢?

讓我用另一個(gè)問題來回答這個(gè)問題:為什么大家不說同樣的語言?為什么有的語言是從左到右寫,而有的是從右到左寫?

有時(shí)候通訊系統(tǒng)是獨(dú)立開發(fā)的,后來就需要互相交流.

ToB藍(lán)波灣
ToB藍(lán)波灣
翻譯于 2年前

0人頂

 翻譯的不錯(cuò)哦!

結(jié)尾: 最后的思考

字節(jié)存儲(chǔ)順序這個(gè)問題是編碼問題中的一個(gè)例子。數(shù)據(jù)需要代表一個(gè)抽象的概念,這個(gè)概念又需要從數(shù)據(jù)中創(chuàng)建。這個(gè)話題值得在自己的文章中或者系列文章中考慮。你還需要了解更多的關(guān)于端相關(guān)的問題. 更多信息:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多