<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0
    關(guān)于字節(jié)序(大端法、小端法)的定義
    《UNXI網(wǎng)絡(luò)編程》定義:術(shù)語“小端”和“大端”表示多字節(jié)值的哪一端(小端或大端)存儲在該值的起始地址。小端存在起始地址,即是小端字節(jié)序;大端存在起始地址,即是大端字節(jié)序。

     

    也可以說:
    1.小端法(Little-Endian)就是低位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,高位字節(jié)排放在內(nèi)存的高地址端。
    2.大端法(Big-Endian)就是高位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,低位字節(jié)排放在內(nèi)存的高地址端。

    舉個簡單的例子,對于整形0x12345678。它在大端法和小端法的系統(tǒng)內(nèi)中,分別如圖1所示的方式存放。

    zijiexu_pic_1 

     

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

    我們知道網(wǎng)絡(luò)上的數(shù)據(jù)流是字節(jié)流,對于一個多字節(jié)數(shù)值,在進(jìn)行網(wǎng)絡(luò)傳輸?shù)臅r候,先傳遞哪個字節(jié)?也就是說,當(dāng)接收端收到第一個字節(jié)的時候,它是將這個字節(jié)作為高位還是低位來處理呢?
    網(wǎng)絡(luò)字節(jié)序定義:收到的第一個字節(jié)被當(dāng)作高位看待,這就要求發(fā)送端發(fā)送的第一個字節(jié)應(yīng)當(dāng)是高位。而在發(fā)送端發(fā)送數(shù)據(jù)時,發(fā)送的第一個字節(jié)是該數(shù)字在內(nèi)存中起始地址對應(yīng)的字節(jié)。可見多字節(jié)數(shù)值在發(fā)送前,在內(nèi)存中數(shù)值應(yīng)該以大端法存放。
    網(wǎng)絡(luò)字節(jié)序說是大端字節(jié)序。
    比如我們經(jīng)過網(wǎng)絡(luò)發(fā)送0x12345678這個整形,在80X86平臺中,它是以小端法存放的,在發(fā)送前需要使用系統(tǒng)提供的htonl將其轉(zhuǎn)換成大端法存放,如圖2所示。

    zijiexu_pic_2

     

    字節(jié)序測試程序
    不同cpu平臺上字節(jié)序通常也不一樣,下面寫個簡單的C程序,它可以測試不同平臺上的字節(jié)序。
    #include <stdio.h>
    #include <netinet/in.h>
    int main()
    {
        int i_num = 0x12345678;
        printf("[0]:0x%x\n", *((char *)&i_num + 0));
        printf("[1]:0x%x\n", *((char *)&i_num + 1));
        printf("[2]:0x%x\n", *((char *)&i_num + 2));
        printf("[3]:0x%x\n", *((char *)&i_num + 3));
    10   
    11      i_num = htonl(i_num);
    12      printf("[0]:0x%x\n", *((char *)&i_num + 0));
    13      printf("[1]:0x%x\n", *((char *)&i_num + 1));
    14      printf("[2]:0x%x\n", *((char *)&i_num + 2));
    15      printf("[3]:0x%x\n", *((char *)&i_num + 3));
    16   
    17      return 0;
    18  } 


    在80X86CPU平臺上,執(zhí)行該程序得到如下結(jié)果:
    [0]:0x78
    [1]:0x56
    [2]:0x34
    [3]:0x12

    [0]:0x12
    [1]:0x34
    [2]:0x56
    [3]:0x78

    分析結(jié)果,在80X86平臺上,系統(tǒng)將多字節(jié)中的低位存儲在變量起始地址,使用小端法。htonl將i_num轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序,可見網(wǎng)絡(luò)字節(jié)序是大端法。

    總結(jié)點(diǎn):80X86使用小端法,網(wǎng)絡(luò)字節(jié)序使用大端法。

    posted on 2009-12-31 21:33 何克勤 閱讀(31371) 評論(0)  編輯  收藏 所屬分類: 其他
    主站蜘蛛池模板: 亚洲黄黄黄网站在线观看| 亚洲欧洲免费视频| 三年片免费观看大全国语| 久久久亚洲欧洲日产国码aⅴ | 中文字幕免费在线观看| 亚洲国产日韩a在线播放| 美腿丝袜亚洲综合| 四虎永久在线精品免费观看视频 | 四虎在线成人免费网站| 国产区图片区小说区亚洲区| 亚洲AV无码码潮喷在线观看| 日韩免费观看一级毛片看看| 成全视频免费观看在线看| 亚洲中文字幕一区精品自拍| 国产成A人亚洲精V品无码| 成年女人18级毛片毛片免费观看| 久久嫩草影院免费看夜色| 亚洲色图激情文学| 亚洲国产婷婷六月丁香| 日本特黄特色aa大片免费| 99国产精品视频免费观看| 麻豆va在线精品免费播放| 亚洲视频免费播放| 奇米影视亚洲春色| 国产一级一片免费播放i| 最近2019免费中文字幕6| 一级毛片a免费播放王色电影| 亚洲图片校园春色| 亚洲精品午夜无码专区| 国产一级一片免费播放i| 一二三四影视在线看片免费| 丝袜足液精子免费视频| 精品免费AV一区二区三区| 91亚洲视频在线观看| 亚洲AV无码乱码在线观看裸奔| 亚洲精品老司机在线观看| 国产老女人精品免费视频| 国产精品69白浆在线观看免费| 久久黄色免费网站| 中文字幕看片在线a免费| 日韩大片在线永久免费观看网站|