網路學習 1 位元組序(大小端)理解

2021-06-21 21:43:40 字數 1430 閱讀 6191

1 參考文章

參考文章主要為

2 定義

先搞清幾個問題

a 什麼是高低位: 其實和小學數學減法低位向高位借位的含義是一樣的,12345越左位就越高,反之就越低。

c 儲存問題;

下面談到如何存放的問題,具體就是數字12345678怎麼存到位址上呢?

1)我自己拍腦殼想的話就是直接扔到記憶體上去就得了。

位址----0x4000  0x4001  0x4002  0x4003  0x4004  0x4005  0x4006  0x4007  

資料----     1              2             3            4             5              6             7            8  

cpu讀取,

首先獲取記憶體首位址和塊的大小,

然後開始讀取,在記憶體上按照從低位址到高位址的順序(其實也就是位址從小到大),讀取1,2,3,4,5,6,7,8

讀完各個數,cpu就知道是12345678了。

這是大端儲存和讀取,就是motorola的powerpc幹的事情

2)同樣是12345678,還有另一種資料儲存和讀取方法

位址----0x4000  0x4001  0x4002  0x4003  0x4004  0x4005  0x4006  0x4007  

資料----     8              7             6            5             4              3             2            1  

cpu讀取,

a)首先獲取記憶體首位址和塊的大小,

b)不同的事,它從記憶體末,也就是記憶體的高位址讀取開始往低位址讀取,但是讀的具體資料的順序還是一樣的,還                                 是先讀1,再讀2,依次3,4,5,6,7,8

c)讀完各個數,cpu就知道是12345678了。

這是小端儲存和讀取,是intel的x86pc幹的事情,前段時間聯想收購了ibm的x86伺服器業務,側面可見ibm伺服器的處理器還是intel公司的。

3 總結

從上面可見,

a)不論哪種cpu,不管資料怎麼儲存,兩種cpu讀取資料的時候仍然是按照從高位到低位讀取的,比如1234,就先從千位1開始讀,然後1,2,3,4

b)記憶體的高低位址,數字的高低位,這兩個概念在cpu上也是相同的。

c)其實兩種儲存器變的只是資料儲存的位置方式變了,因為資料位置變了,讀取的位置變了,但是讀取的資料順序還是原來那個樣子。 囉嗦的例子就是,同樣是1234這個數字,powerpc在記憶體上從低位址開始讀,x86在記憶體上從高位址開始讀,但是讀的仍然是1,2,3,4,5,從低位到高位讀到的資料。

也就是讀取資料,仍然是從低位到高位讀資料,但是有從低位址到高位址,從高位址到低位址兩種方式。

位元組序(大小端)理解

位元組序,就是 大於乙個位元組型別的資料在記憶體中的存放順序。是在跨平台和網路程式設計中,時常要考慮的問題。位元組序經常被分為兩類 最高記憶體位址 0xffffffff 棧區 從高記憶體位址,往 低記憶體位址發展。即棧底在高位址,棧頂在低位址 堆區 從低記憶體位址 往 高記憶體位址發展 全域性區 常...

大小端 網路位元組序 本地位元組序問題

總結 1 80x86使用小端法 即本地位元組序 網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳...

大小端 網路位元組序問題

總結 1 80x86使用小端法,網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳送的buffer...