乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【轉(zhuǎn)】網(wǎng)絡(luò)字節(jié)序與主機字節(jié)序 - 做最好的自己 - wellnp - 和訊博客

       darkhero 2007-05-25
      網(wǎng)絡(luò)字節(jié)序與主機字節(jié)序
      作者: ppnote 發(fā)表日期: 2006-06-19 22:45 文章屬性: 原創(chuàng) 復(fù)制鏈接


      網(wǎng)絡(luò)字節(jié)序與主機字節(jié)序

      不同的CPU有不同的字節(jié)序類型 這些字節(jié)序是指整數(shù)在內(nèi)存中保存的順序 這個叫做主機序
      最常見的有兩種
      1. Little endian:將低序字節(jié)存儲在起始地址
      2. Big endian:將高序字節(jié)存儲在起始地址

      LE little-endian
      最符合人的思維的字節(jié)序
      地址低位存儲值的低位
      地址高位存儲值的高位
      怎么講是最符合人的思維的字節(jié)序,是因為從人的第一觀感來說
      低位值小,就應(yīng)該放在內(nèi)存地址小的地方,也即內(nèi)存地址低位
      反之,高位值就應(yīng)該放在內(nèi)存地址大的地方,也即內(nèi)存地址高位

      BE big-endian
      最直觀的字節(jié)序
      地址低位存儲值的高位
      地址高位存儲值的低位
      為什么說直觀,不要考慮對應(yīng)關(guān)系
      只需要把內(nèi)存地址從左到右按照由低到高的順序?qū)懗?
      把值按照通常的高位到低位的順序?qū)懗?
      兩者對照,一個字節(jié)一個字節(jié)的填充進去

      例子:在內(nèi)存中雙字0x01020304(DWORD)的存儲方式

      內(nèi)存地址
      4000 4001 4002 4003
      LE 04 03 02 01
      BE 01 02 03 04

      例子:如果我們將0x1234abcd寫入到以0x0000開始的內(nèi)存中,則結(jié)果為
            big-endian   little-endian
      0x0000   0x12       0xcd
      0x0001   0x23       0xab
      0x0002   0xab       0x34
      0x0003   0xcd       0x12
      x86系列CPU都是little-endian的字節(jié)序.

      網(wǎng)絡(luò)字節(jié)順序是TCP/IP中規(guī)定好的一種數(shù)據(jù)表示格式,它與具體的CPU類型、操作系統(tǒng)等無關(guān),從而可以保證數(shù)據(jù)在不同主機之間傳輸時能夠被正確解釋。網(wǎng)絡(luò)字節(jié)順序采用big endian排序方式。

      為了進行轉(zhuǎn)換 bsd socket提供了轉(zhuǎn)換的函數(shù) 有下面四個
      htons 把unsigned short類型從主機序轉(zhuǎn)換到網(wǎng)絡(luò)序
      htonl 把unsigned long類型從主機序轉(zhuǎn)換到網(wǎng)絡(luò)序
      ntohs 把unsigned short類型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機序
      ntohl 把unsigned long類型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機序

      在使用little endian的系統(tǒng)中 這些函數(shù)會把字節(jié)序進行轉(zhuǎn)換
      在使用big endian類型的系統(tǒng)中 這些函數(shù)會定義成空宏

      同樣 在網(wǎng)絡(luò)程序開發(fā)時 或是跨平臺開發(fā)時 也應(yīng)該注意保證只用一種字節(jié)序 不然兩方的解釋不一樣就會產(chǎn)生bug.

      注:
      1、網(wǎng)絡(luò)與主機字節(jié)轉(zhuǎn)換函數(shù):htons ntohs htonl ntohl (s 就是short l是long h是host n是network)
      2、不同的CPU上運行不同的操作系統(tǒng),字節(jié)序也是不同的,參見下表。
      處理器     操作系統(tǒng)     字節(jié)排序
      Alpha     全部     Little endian
      HP-PA     NT     Little endian
      HP-PA     UNIX     Big endian
      Intelx86     全部     Little endian <-----x86系統(tǒng)是小端字節(jié)序系統(tǒng)
      Motorola680x()     全部     Big endian
      MIPS     NT     Little endian
      MIPS     UNIX     Big endian
      PowerPC     NT     Little endian
      PowerPC     非NT     Big endian   <-----PPC系統(tǒng)是大端字節(jié)序系統(tǒng)
      RS/6000     UNIX     Big endian
      SPARC     UNIX     Big endian
      IXP1200 ARM核心     全部     Little endian

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多