注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐的机器猫 大桥加加网易分站

要有更宽广的视野和胸怀

 
 
 

日志

 
 

Big-Endian和Little-Endian的判断,以及我写的C语言测试程序  

2012-03-15 15:27:44|  分类: 嵌入式技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1,什么是字节顺序

指的就是数据在内存里存储的顺序,通常我们默认一个存储单元为1Byte,一个逻辑数据比如Float是4个Byte,它在内存理存储的顺序可以是高字节在前,也可以是低字节在前.这样就有区分了.

2,有些什么顺序:

Big-Endian(MSB),高字节在低地址  中文称“大端”

Little-Endian(LSB),低字节在低地址 中文称“小端”


3,为什么要有字节顺序?

因为程序需要与外界通讯,传送数据,这里的外界包括其他机器和其他语言写的程序.比如x86下c++程序与linux底下的程序通讯,比如c++和java的程序通讯.都会涉及到字节存放顺序的问题.


4,哪些会是Big-Endian,哪些会是Little-Endian

网络协议都是Big-Endian的,Java编译的都是Big-Endian的

Motorola的PowerPC是Big-Endian的

x86系列则采用Little-Endian方式存储数据。

ARM同时支持 big和little,实际应用中通常使用Little-Endian


5.  我的示例程序,可以测试本机CPU是哪种Endian
/************************************************************
 * Name:        check_endian() by stephenzhu 2012/03/15
 * Fuction:     to check the CPU's Byte order(Big or Little Endian)
 *
 * Big-Endian:
 *      IBM
 *      Motorola PowerPC
 *      Sun
 * Little-Endian:
 *      x86
 *      arm default
 * (ARM's Endian is configuable, default is Little-Endian)
 * *********************************************************/
void check_endian(void)
{
        unsigned short thenumber=0xaabb;
        if( *((unsigned char *)&thenumber) == 0xaa)
                printf("Big Endian.\n");
        else
                printf("Little Endian.\n");
}
  评论这张
 
阅读(1694)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017