UNIX网络编程(卷一:套接字)
第三章——确定主机字节序的程序
/*这个函数是用来判断电脑是以大端还是以小端的方式存储的
*主要掌握的应该是这个函数的思想,即利用union这个特殊的结构体,通过short存储两个字节的数字来确认程序是大端还是小端
*
*/
#include "unp.h"
int main(int argc,char **argv)
{
//union中所有成员引用的是内存中的相同位置
union{
short s;//short 2个字节
char c[sizeof(short)];//c 1个字节
} un;
un.s=0x102;//转换为二进制的结构为000000001 00000010 ,因为按字节存储,所以存储的数字为1和2
printf("%s:\n",CPU_VENDOR_OS);//应该是看电脑的系统是什么
printf("c[0]的地址:%d\n",&un.c[0]);
printf("c[1]的地址:%d\n",&un.c[1]);
//如果s是两个字节
if(sizeof(short)==2){
//低序字节为2,高序字节为1,低序字节存储在起始地址,为小端
//因为栈是往下增长的,所以低序字节在
if(un.c[0]==1&&un.c[1]==2){
printf("这是大端存储方式\n");
}else if(un.c[0]==2&&un.c[1]==1){
printf("这是小端存储方式\n");
}else {
printf("unknown\n");
}
}else{
printf("sizeof(short) =%d\n",sizeof(short));
}
return 0;
}