簡(jiǎn)介
在幾乎所有的機(jī)器上蒸播,多字節(jié)對(duì)象都被存儲(chǔ)為連續(xù)的字節(jié)序列。例如在C語(yǔ)言中萍肆,一個(gè)類型為int的變量x地址為0x100袍榆,那么其對(duì)應(yīng)地址表達(dá)式&x的值為0x100。且x的四個(gè)字節(jié)將被存儲(chǔ)在存儲(chǔ)器的0x100, 0x101, 0x102, 0x103位置匾鸥。[1]
而存儲(chǔ)地址內(nèi)的排列則有兩個(gè)通用規(guī)則靠益。一個(gè)多位的整數(shù)將按照其存儲(chǔ)地址的最低或最高字節(jié)排列央勒。如果最低有效位在最高有效位的前面,則稱小端序;反之則稱大端序类腮。在網(wǎng)絡(luò)應(yīng)用中歼捐,字節(jié)序是一個(gè)必須被考慮的因素欠气,因?yàn)椴煌瑱C(jī)器類型可能采用不同標(biāo)準(zhǔn)的字節(jié)序此迅,所以均按照網(wǎng)絡(luò)標(biāo)準(zhǔn)轉(zhuǎn)化。
例如假設(shè)上述變量x類型為int锭硼,位于地址0x100處房资,它的十六進(jìn)制為0x01234567,地址范圍為0x100~0x103字節(jié)檀头,其內(nèi)部排列順序依賴于機(jī)器的類型轰异。大端法從首位開(kāi)始將是:0x100: 01, 0x101: 23,..。而小端法將是:0x100: 67, 0x101: 45,..暑始。
字節(jié)順序
對(duì)于單一的字節(jié)(a byte)搭独,大部分處理器以相同的順序處理位元(bit),因此單字節(jié)的存放方法和傳輸方式一般相同廊镜。
對(duì)于多字節(jié)數(shù)據(jù)牙肝,如整數(shù)(32位機(jī)中一般占4字節(jié)),在不同的處理器的存放方式主要有兩種嗤朴,以內(nèi)存中0x0A0B0C0D的存放方式為例配椭,分別有以下幾種方式:
大端序
- 數(shù)據(jù)以8bit為單位:
示例中,最高位字節(jié)是0x0A 存儲(chǔ)在最低的內(nèi)存地址處雹姊。下一個(gè)字節(jié)0x0B存在后面的地址處股缸。正類似于十六進(jìn)制字節(jié)從左到右的閱讀順序。
- 數(shù)據(jù)以16bit為單位:
最高的16bit單元0x0A0B存儲(chǔ)在低位吱雏。
小端序
- 數(shù)據(jù)以8bit為單位:
最低位字節(jié)是0x0D 存儲(chǔ)在最低的內(nèi)存地址處敦姻。后面字節(jié)依次存在后面的地址處寺酪。
- 數(shù)據(jù)以16bit為單位:
最低的16bit單元0x0D0C存儲(chǔ)在低位。
- 更改地址的增長(zhǎng)方向:
當(dāng)更改地址的增長(zhǎng)方向替劈,使之由右至左時(shí),表格更具有可閱讀性得滤。
最低有效位(LSB)是0x0D 存儲(chǔ)在最低的內(nèi)存地址處陨献。后面字節(jié)依次存在后面的地址處。
最低的16bit單元0x0C0D存儲(chǔ)在低位懂更。
總結(jié)
- 大端:高字節(jié)存放在低地址
- 小端:低字節(jié)存放在低地址