网络面试题:字节序?网络字节序和主机字节序?
文章目錄
- 一. 概念
- 二.分類
- 三.為什么要分大小端
- 四. 高低地址與高低字節
- 3.1 高低地址
- 3.2 高低字節
- 五、例子
- 六. 如何判斷大小端
一. 概念
字節序,就是 大于一個字節類型的數據在內存中的存放順序。是在跨平臺和網絡編程中,時常要考慮的問題。
二.分類
字節序經常被分為兩類:
三.為什么要分大小端
這是因為在計算機系統中,我們是以字節為單位的,每個地址單元都對應著一個字節,一個字節為8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對于位數大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個字節,那么必然存在著一個如何將多個字節安排的問題。因此就導致了大端存儲模式和小端存儲模式。
四. 高低地址與高低字節
3.1 高低地址
C程序映射中內存的空間布局大致如下:
| 棧區 | 從高內存地址,往 低內存地址發展。即棧底在高地址,棧頂在低地址 |
| 堆區 | 從低內存地址 ,往 高內存地址發展 |
| 全局區 | 常量和全局變量 |
| 代碼區 | |
| 最低內存地址 | 0x00000000 |
3.2 高低字節
在十進制中靠左邊的是高位,靠右邊的是低位,在其他進制也是如此。例如 0x12345678,從高位到低位的字節依次是0x12、0x34、0x56和0x78。
網絡字節序 就是 大端字節序:4個字節的32 bit值以下面的次序傳輸,首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit
主機字節序 就是 小端字節序,現代PC大多采用小端字節序。
五、例子
對于數據 0x12345678,假設從地址0x4000開始存放,在大端和小端模式下,存放的位置分別為:
- 采用Little-endian模式的CPU對操作數的存放方式是從低字節到高字節
- 而Big-endian模式對操作數的存放方式是從高字節到低字節。
小端存儲后:0x78563412 大端存儲后:0x12345678
六. 如何判斷大小端
那么問題來了,如何寫程序判斷機器的存儲方式呢?(即“大端存儲”還是“小端存儲”)
例如:0x2345678在內存中是以78 56 34 12的方式存放的,可以看到變量i每個字節的內容,從而輕易的判斷出它是小端存儲。
寫程序判斷其實也是這樣的思路:想辦法取出一個字節的內容,就可以知道是哪種存儲方式。比如,某個變量是4個字節,我們只要取出它的第一個字節內容,如果是78,則說明是小端存儲;反之是大端。
總結
以上是生活随笔為你收集整理的网络面试题:字节序?网络字节序和主机字节序?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AcWing4084 号码牌 (并查集
- 下一篇: java并发知识汇总