色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 解析大端模式和小端模式
解析大端模式和小端模式
時間:2016-12-30作者:華清遠見

一、概念及詳解

在各種體系的計算機中通常采用的字節存儲機制主要有兩種: big-endian和little-endian,即大端模式和小端模式。

先回顧兩個關鍵詞,MSB和LSB:

MSB:Most Significant Bit ------- 高有效位
        LSB:Least Significant Bit ------- 低有效位

大端模式(big-edian)

big-endian:MSB存放在低端的地址上。

舉例,雙字節數0x1234以big-endian的方式存在起始地址0x00002000中:

| data |<-- address
        | 0x12 |<-- 0x00002000
        | 0x34 |<-- 0x00002001

在Big-Endian中,對于bit序列中的序號編排方式如下(以雙字節數0x8B8A為例):

bit | 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15
        ------MSB----------------------------------LSB
        val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
        +--------------------------------------------+
        = 0x8 B 8 A

小端模式(little-endian)

little-endian:LSB存放在低端的地址上。

舉例,雙字節數0x1234以little-endian的方式存在起始地址0x00002000中:

| data |<-- address
        | 0x34 |<-- 0x00002000
        | 0x12 |<-- 0x00002001

在Little-Endian中,對于bit序列中的序號編排和Big-Endian剛好相反,其方式如下(以雙字節數0x8B8A為例):

bit | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0
        ------MSB-----------------------------------LSB
        val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
        +---------------------------------------------+
        = 0x8 B 8 A

二、數組在大端小端情況下的存儲:

以unsigned int value = 0x12345678為例,分別看看在兩種字節序下其存儲情況,我們可以用unsigned char buf[4]來表示value:
Big-Endian: 低地址存放高位,如下:

高地址
        ---------------
        buf[3] (0x78) -- 低位
        buf[2] (0x56)
        buf[1] (0x34)
        buf[0] (0x12) -- 高位
        ---------------
        低地址

Little-Endian: 低地址存放低位,如下:

高地址
        ---------------
        buf[3] (0x12) -- 高位
        buf[2] (0x34)
        buf[1] (0x56)
        buf[0] (0x78) -- 低位
        --------------
        低地址

三、大端小端轉換方法:

Big-Endian轉換成Little-Endian如下:

#define BigtoLittle16(A)                 ((((uint16)(A) & 0xff00) >> 8) | \
                                                                   (((uint16)(A) & 0x00ff) << 8))
        #define BigtoLittle32(A)                 ((((uint32)(A) & 0xff000000) >> 24) | \
                                                                   (((uint32)(A) & 0x00ff0000) >> 8) | \
                                                                   (((uint32)(A) & 0x0000ff00) << 8) | \
                                                                   (((uint32)(A) & 0x000000ff) << 24))

四、大端小端檢測方法:

如何檢查處理器是big-endian還是little-endian?

聯合體union的存放順序是所有成員都從低地址開始存放,利用該特性就可以輕松地獲得了CPU對內存采用Little-endian還是Big-endian模式讀寫。

int checkCPUendian()
        {
                union
                {
                        unsigned int a;
                        unsigned char b; 
                }c;
                c.a = 1;
                return (c.b == 1); 
        } 
        /*return 1 : little-endian, return 0:big-endian*/

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 国产精品人妻久久久久 | 中文字幕人成乱码的注意事项 | 亚洲AV无码国产永久播放蜜芽 | 天堂中文在线WWW天堂在线 | 天天爽夜夜爽夜夜爽 | 办公室啪啪激烈高潮动态图 | 久久免费视频一区二区三区 | 中国精学生妹品射精久久 | 免费99精品国产人妻自在线 | wwwxxx国产| 天天碰免费上传视频 | 在线中文免费视频 | 日本免码va在线看免费最新 | 日韩欧美中文字幕在线三区 | oldgraanny日本老熟妇 | 精品久久久无码人妻字幂 | 国产乱码一区二区三区 | 被夫上司强迫的女人在线中文 | 99久久久国产精品消防器材 | 久久精品国产99久久丝袜 | 欧美做爰又粗又大免费看软件 | 亚洲国产精品无码一线岛国 | 色播影院私人影院免费 | HD老熟女BBn老淑女 | 在线观看自拍视频 | 国产在线青青不卡 | 欧洲熟妇色XXXX欧美老妇免费 | 中国一级黄色片子 | 美女末成年视频黄是免费网址 | 车上震动A级作爱视频 | 中文字幕av无码专区第一页 | 在线观看17c | 色综合久久成人综合网五月 | 水牛影视一区二区三区久 | 蜜桃视频网站www | 最新国产在线视频 | 99热国产这里只有精品无卡顿 | 国产激情欧美激情 | 天天夜碰日日摸日日澡 | 一本一道久久综合狠狠老 | 国产成人aaaaa级毛片 |