日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络面试题:字节序?网络字节序和主机字节序?

發布時間:2023/12/8 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络面试题:字节序?网络字节序和主机字节序? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一. 概念
  • 二.分類
  • 三.為什么要分大小端
  • 四. 高低地址與高低字節
    • 3.1 高低地址
    • 3.2 高低字節
  • 五、例子
  • 六. 如何判斷大小端

一. 概念

字節序,就是 大于一個字節類型的數據在內存中的存放順序。是在跨平臺和網絡編程中,時常要考慮的問題。

二.分類

字節序經常被分為兩類:

  • Big-Endian(大端):高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。
  • Little-Endian(小端):低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。
  • 三.為什么要分大小端

    這是因為在計算機系統中,我們是以字節為單位的,每個地址單元都對應著一個字節,一個字節為8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對于位數大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個字節,那么必然存在著一個如何將多個字節安排的問題。因此就導致了大端存儲模式和小端存儲模式。

    四. 高低地址與高低字節

    3.1 高低地址

    C程序映射中內存的空間布局大致如下:

    最高內存地址0xFFFFFFFF
    棧區從高內存地址,往 低內存地址發展。即棧底在高地址,棧頂在低地址
    堆區從低內存地址 ,往 高內存地址發展
    全局區常量和全局變量
    代碼區
    最低內存地址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,則說明是小端存儲;反之是大端。

    總結

    以上是生活随笔為你收集整理的网络面试题:字节序?网络字节序和主机字节序?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。