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)處理器為小端模式;