叁:大小端模式(Big_Little_Endian)

1:處理器存儲(chǔ)多字節(jié)數(shù)據(jù)時(shí),存在大端和小端模式;
2:處理器存儲(chǔ)單字節(jié)數(shù)據(jù)時(shí),位順序也存在大端和小端模式;
3:小端模式:低地址存儲(chǔ)低位的數(shù)據(jù)(字節(jié)),高地址存儲(chǔ)高位數(shù)據(jù)(字節(jié));
4:大端模式:低地址存儲(chǔ)高位數(shù)據(jù)(字節(jié)),高地址存儲(chǔ)高位數(shù)據(jù)(字節(jié));


One:使用共同體結(jié)構(gòu)判斷多字節(jié)存數(shù)模式

/********************************
*Function:測(cè)試處理器大小端模式
*Platform:X86
*Compiler:GCC
*Author:Programme By Golf
** *****************************/

#include <stdio.h>

typedef union 
{
    unsigned short  Data;
    struct
    {
        unsigned char a[2];
    }cc;
}Big_Little;

Big_Little big_little; 

void main()
{
    char *ptr1 = "Little_Mode"; 
    char *ptr2 = "Big_Mode";
    big_little.Data = 0x11aa;
    if(big_little.cc.a[0] == 0xaa && big_little.cc.a[1] == 0x11)
    {
        printf("big_little.Data = 0x%x\n",big_little.Data);
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[0],big_little.cc.a[0]);
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[1],big_little.cc.a[1]);
        printf("%s\n",ptr1);
    }
    if(big_little.cc.a[1] == 0xaa && big_little.cc.a[0] == 0x11)
    {
        printf("big_little.Data = 0x%x\n",big_little.Data); 
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[0],big_little.cc.a[0]);
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[1],big_little.cc.a[1]);
        printf("%s\n",ptr2);
    }
}

Two:使用共同體結(jié)構(gòu)判斷單字節(jié)存數(shù)模式(位順序)

/********************************
 * *Function:測(cè)試處理器大小端模式
 * *Platform:X86
 * *Compiler:GCC
 * *Author:Programme By Golf
 * ** *****************************/

#include <stdio.h>

typedef union
{
    unsigned char data;
    struct
    {
        unsigned char a:1;
        unsigned char b:1;
        unsigned char c:1;
        unsigned char d:1;
        unsigned char e:1;
        unsigned char f:1;
        unsigned char g:1;
        unsigned char h:1;
    }cc;
}big_little;

big_little Big_Little;

void main()
{
    
    Big_Little.data = 0x01;
    if(Big_Little.cc.a == 0x01)
        printf("Little_MOde\n");
    else
    if(Big_Little.cc.h == 0x01)
        printf("Big_MOde\n");
    else
        printf("error\n");
}

Three:使用指針判斷大小端模式

/******************************
*測(cè)試處理器大小端模式
*Platform:X86
*Compiler:GCC
*Author:Programme By Golf
*****************************/

#include <stdio.h>

void main(void)
{
    char c1;
    char c2; 
    short *ptr;
    *ptr = 0x11aa;
    c1 = *((char *)ptr);
    c2 = *((char *)ptr+1);
    printf("c1_address = %p,c1_value = 0x%x\n",(char *)ptr,(unsigned char)c1);
    printf("c2_address = %p,c2_value = 0x%x\n",(char *)ptr+1,c2);
    if((unsigned char)c1 == 0xaa)
        printf("Little_Endian\n");
    if((unsigned char)c1 == 0x11)
        printf("Big_Endian\n");
}

以上代碼,在ubuntu10.04系統(tǒng)驗(yàn)證通過(guò),X86架構(gòu)處理器為小端模式;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容