大端小端的判别以及如何进行交换

Big endian和Little enddian的代表就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。两者主要不同在于存放数据顺序的不同。

所谓Big endian就是从低地址到高地址存放高字节到低字节,地址第一个字节是高字节,但是Little endian恰恰相反,从低地址到高地址存放低字节到高字节,地址第一个字节是低字节。

如:int a = 0x1234abcd;如果是little endian就是低地址到高地址0xcd-0xab-0x34-0x12;而Big little相反,低地址开始0x12-0x34-0xab-0xcd。两种不同的存储方式,

1,判别大小端

int CheckCPU()
{
 {
  union Check
  {
   int a;
   char b;
  } c;
  c.a = 2;
  return (c.b == 2);
 }
}

这个函数,如果是Big endian就返回0;Little endian返回1;

因为联合体是共用一段内存的,先用int a =2,4字节,然后用char占用1字节,高位3字节被冲掉了(联合体新值会冲去旧值),这个时候剩下的1字节是低地址。如果是little endian就会有数字,因为little endian是低地址存低字节,高地址存高字节。但如果是big endian就没有数字,Big little是低地址存高字节,高地址存低字节,高地址的踢出意味着数字的消失。

 

[root@jsetc ~]# vim 1.c
[root@jsetc ~]# gcc 1.c -o 1
[root@jsetc ~]# ./1
1


结果,因为是x86平台的cpu,所以理所当然就是little endian了。

 

 

2,交换大小端

主要通过移位来完成,a&0x000000ff得到0x000000cd,然后将值左移24位送到高地址,得0xcd000000(因为优先级要叫括号)。

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值