编程判断大端方式还是小端方式
我自己的理解和代码如下:
如果数字0x12345678
那么大端方式从低地址到高地址依次存储 0x12 0x34 0x56 0x78
如果是小端方式的话从低地址到高地址依次存储 0x78 0x56 0x34 0x12
我的程序如下:
int main()
{
unsigned int i=0x12345678;
cout<<hex<<i<<endl;
char *p=(char *)&i;
if(*p==0x78)
cout<<"little Endition"<<endl;
else
cout<<"Big Endition"<<endl;
return 0;
}
结果输出却让我大跌眼镜
12345678
Big Endition
输出我有点看不懂,一般笔记本不都是大端方式吗?
还有一个问题,编程实现大端方式小端方式,我在网上搜了下还有用UNION联合体,没看懂,求解答。联合体不是在同一时刻只能存储一个变量吗,在给c.a赋值后,c.b怎么可能为1呢?
int checkCPU()
{
{
union w
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);
}
}
附上个人电脑信息:
MacBook Pro (Retina, 13-inch, Early 2015)
处理器 2.7 GHz Intel Core i5
编辑器 Xcode6
c++看不懂,就说说union吧。假设int 是4个byte,那么当设置 c.a=1后,大端的话内存为 0x00000001, 因为高位都是0,最低位为01,内存从左往右地址是从低到高,符合大端定义高位字节在内存地址低位。
小端则相反,内存中为 0x01000000。b为char,占一个字节,并且是低内存地址的一个字节,如果在小端模式,则为0x01, 大端模式为0x00。结论是如果 c.b==1 返回true, 则为小端。
补充:Intel x86 processors 都是小端,现在大部分机器都是Intel的cpu吧。
看懂c++了,结论没错,是小端的。