两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

一、什么是字節(jié)順序?

字節(jié)順序,是指數(shù)據(jù)在內(nèi)存中的存放順序。

舉例說明什么是字節(jié)順序

使用16進(jìn)制表示兩個(gè)數(shù):0x12345678和0x11223344。在內(nèi)存中有兩種方法存儲(chǔ)這兩個(gè)數(shù)字,分別為:

字節(jié)順序


字節(jié)順序

從上圖看,兩種方案雖有不同,但也有共識(shí),即依次存儲(chǔ)每一個(gè)數(shù)字,即先存0x12345678,再存0x11223344。大家的不同在于,對于某一個(gè)要表示的值,是把值的低位存到低地址,還是把值的高位存到低地址。


二、字節(jié)順序的分類

字節(jié)的排列方式有兩種。例如,將一個(gè)多字節(jié)對象的低位放在較小的地址處,高位放在較大的地址處,則稱小端序;反之則稱大端序

在幾乎所有的機(jī)器上,多字節(jié)對象都被存儲(chǔ)為連續(xù)的字節(jié)序列。例如在C語言中,一個(gè)類型為int的變量x地址為0x100,那么其對應(yīng)地址表達(dá)式&x的值為0x100。且x的四個(gè)字節(jié)將被存儲(chǔ)在電腦內(nèi)存的0x100, 0x101, 0x102, 0x103位置。


(1)大端、小端模式的區(qū)別

例如假設(shè)變量x類型為int,位于地址0x100處,它的值為0x01234567,地址范圍為0x100~0x103字節(jié),其內(nèi)部排列順序依賴于機(jī)器的類型。大端法從首位開始將是:0x100: 0x01, 0x101: 0x23,..。而小端法將是:0x100: 0x67, 0x101: 0x45,..。


(2)不同處理器體系

● x86,MOS Technology 6502,Z80,VAX,PDP-11等處理器為Little endian。

● Motorola 6800,Motorola 68000,PowerPC 970,System/370,SPARC(除V9外)等處理器為Big endian。

● ARM, PowerPC (除PowerPC 970外), DEC Alpha, SPARC V9, MIPS, PA-RISC and IA64的字節(jié)序是可配置的。


三、網(wǎng)絡(luò)字節(jié)序

對于搞網(wǎng)絡(luò)通信應(yīng)用(比如IM、消息推送、實(shí)時(shí)音視頻)開發(fā)的程序員來說,自已寫通信底層的話是一定會(huì)遇到大小端問題,上面所說的大小端字節(jié)序都是在說計(jì)算機(jī)自己,也被稱作主機(jī)字節(jié)序。同型號(hào)計(jì)算機(jī)上寫的程序,在相同的系統(tǒng)上面運(yùn)行是沒有問題的。

但計(jì)算機(jī)網(wǎng)絡(luò)的出現(xiàn)讓大小端問題變的復(fù)雜化了,因?yàn)槊總€(gè)計(jì)算機(jī)都有自己的主機(jī)字節(jié)序。不同計(jì)算機(jī)之間通過網(wǎng)絡(luò)通信時(shí):我“說”的你聽不懂,你“說”我也聽不懂,這可怎么辦?這時(shí)候就需要約定俗成的協(xié)議來解決問題。

TCP/IP協(xié)議很好的解決了這個(gè)問題,TCP/IP協(xié)議規(guī)定使用“大端”字節(jié)序作為網(wǎng)絡(luò)字節(jié)序。

這樣不管計(jì)算機(jī)采用哪種字節(jié)序,發(fā)送數(shù)據(jù)的時(shí)候必須將自己的主機(jī)字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序(即“大端”字節(jié)序),對接收到的數(shù)據(jù)轉(zhuǎn)換為自己的主機(jī)字節(jié)序。這樣一來,也就達(dá)到了與CPU、操作系統(tǒng)無關(guān),實(shí)現(xiàn)了網(wǎng)絡(luò)通信的標(biāo)準(zhǔn)化。

● 主機(jī)字節(jié)序到網(wǎng)絡(luò)字節(jié)序的轉(zhuǎn)換

為了程序的兼容,網(wǎng)絡(luò)通信過程中每次發(fā)送和接受數(shù)據(jù)都要進(jìn)行轉(zhuǎn)換,這樣做的目的是保證代碼在任何計(jì)算機(jī)上執(zhí)行時(shí)都能達(dá)到預(yù)期的效果。

通信時(shí)的這種常用的操作,Socket API這一層,一般都提供了封裝好的轉(zhuǎn)換函數(shù),方便程序員使用。比如從主機(jī)字節(jié)序到網(wǎng)絡(luò)字節(jié)序的轉(zhuǎn)換函數(shù):htons、htonl(C語言中常用),從網(wǎng)絡(luò)字節(jié)序到主機(jī)字節(jié)序的轉(zhuǎn)換函數(shù):ntohs、ntohl(C語言中常用)。當(dāng)然,明白了原理后也可以編寫自己的轉(zhuǎn)換函數(shù)。


點(diǎn)贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程

從零到寫出一個(gè)爬蟲的Python編程課程

只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時(shí)間)