#include <iostream> using namespace std; /* big-endian表示从大端开始存储,比如int型数据a = 0x1122,则它在内存中按照地址从低到高的顺序依次是0x11, 0x22 * 即,低地址对应高位。 * little_endian则相反。 * 思路是取一个short型数据,共2个字节,将其地址转化为char型指针,然后解引用,取其低地址的一个字节的数据, * 如果是对于数据的高位0x11,那么是big endian的,否则是little endian。 */ bool IsBig_Endian() { unsigned short test = 0x1122; if(*( (unsigned char*) &test ) == 0x11){ cout<<"Big Endian"<<endl; return true; } else{ cout<<"Little Endian"<<endl; return false; } }//IsBig_Endian() /* 判断编译环境的栈增长方向 * 必须用两个函数来判断,因为调用的函数肯定在被调用函数之前进栈 * 所以可以传调用的函数的,比如main();一个局部变量地址到被调函数内,与被调函数内的一个局部变量地址进行比较 */ bool Stack_HighToLow(char *p){ char a = 1; if((char*)p > (char*)&a){ cout<<"Stack increase from high to low address"<<endl; return true; } else{ cout<<"Stack increase from low to high address"<<endl; return false; } } int main(){ cout<<IsBig_Endian()<<endl; char p = 0; cout<<Stack_HighToLow(&p)<<endl;; return 0; }