Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28970
  • 博文数量: 17
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-18 15:15
文章分类
文章存档

2010年(17)

我的朋友
最近访客

分类: C/C++

2010-05-13 13:05:36

嵌入式系统开发者应该对Little-endianBig-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

0x4000

0x4001

存放内容

0x34

0x12

而在Big-endian模式CPU内存中的存放方式则为:

内存地址

0x4000

0x4001

存放内容

0x12

0x34

32bit宽的数0x12345678Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x78

0x56

0x34

0x12

而在Big-endian模式CPU内存中的存放方式则为:

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x12

0x34

0x56

0x78

 

C编程实现判断,代码如下:

/* 测试你的机器使用的大端模式,还是小端模式 */
/* 若x0=0x11,则是大端; 若x0=0x22,则是小端 */

#include <stdio.h>
 
int main()
{
    short int x=0x1122;
    char *p = &x;
 
    if ( *p == 0x11)
        printf("big-endian(大端模式)\n");
    else
        printf("little-endian(小端模式)\n");

    return 0;
}


阅读(745) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~