大端序与小端序

原文转载于:http://blog.csdn.net/shanshanpt/article/details/7365613

其实 大小端序是针对于不同的硬件而言的,具体的就是不同的CPU 是不同的处理的。 对于 Intel x86 系列就是小端序。

下面具体介绍:

简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。再说白一点,字节序通常只和你使用的处理器架构有关,而和编程语言无关。

Big(大端序):
数据的高位字节存放在地址的低端 低位字节存放在地址高端

Little(小端序):
数据的高位字节存放在地址的高端 低位字节存放在地址低端

字节的高位与低位:

举个例子,int a =0x12345678 ; 那么左边12就是高位字节,右边的78就是低位字节,从左到右,由高到低,(注意,高低乃相对而言,比如56相对于78是高字节,相对于34是低字节 )

关于地址的高端与低端:
0x00000001 // 相对于下面三个是低端
0x00000002
0x00000003
0x00000004 //相对于上面三个是高端

字节序如何存储数据:

假设从地址 0x00000001 处开始存储十六进制数 0x52365670

( 1.)对于大端而言:

              0x00000001          // 储存52
              0x00000002           //储存36
              0x00000003           //储存56
              0x00000004           //储存70

( 2.)对于小端而言:

              0x00000001          // 储存70
              0x00000002           //储存56
              0x00000003           //储存36
              0x00000004           //储存52

总结:大端序是按照数字的书写顺序进行存储的,而小端序是颠倒书写顺序进行存储的。

———————————– 代码判断方法:————————————————-

bool isBig()
{
int a =1;

if( ( (char *)&a )[3]==1 ) // 标准的写法是将a[3]替换为a[sizeof( int) - 1]
{

   return true ;

}

else
{

   returnfalse ;

}
}

打开VS的内存窗口,看一下a的存储方式,一目了然

大端序与小端序( 基本的浅见知识

a是int,所以占四个字节,其值是00000001,存储方式如下:所以a[3]是0,不是大端序。

0x0012FE88  01 // a[0]

0x0012FE89  00 // a[1]

0x0012FE8A  00 // a[2]

0x0012FE8B  00 // a[3]

—->当然还有方法也是可以的:就是使用 “Union ”

bool isBig()
{
union
{
unsigned shorta ;
char b ;
} c;

c.a = 0x0102;

if(c.b==1)
{
return true;
}
else
{
return false;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值