Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238440
  • 博文数量: 97
  • 博客积分: 1440
  • 博客等级: 上尉
  • 技术积分: 821
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-28 13:45
文章分类

全部博文(97)

文章存档

2011年(3)

2010年(4)

2009年(7)

2008年(2)

2007年(8)

2006年(73)

我的朋友

分类: C/C++

2006-12-09 21:56:39

  今天在网上看见有人讨论big endian和little endian的问题,觉得以下是正确的,并编程验证:
  Big endian machine: It thinks the first byte it reads is the biggest.
Little endian machine: It thinks the first byte it reads is the littlest.
举个例子,从内存地址0x0000开始有以下数据:
 0x0000     0x12
 0x0001     0x34
 0x0002     0xab
 0x0003     0xcd
如果我们去读取一个地址为0x0000的四个字节变量,若字节序为big-endian,则读出
结果为0x1234abcd;若字节序位little-endian,则读出结果为0xcdab3412.
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
        big-endian     little-endian
0x0000     0x12              0xcd
0x0001     0x34              0xab
0x0002     0xab              0x34
0x0003     0xcd              0x12
x86系列CPU都是little-endian的字节序.
以下是验证:
#include
#include
int main(int argc, char **argv)
{
        if(G_BYTE_ORDER == G_LITTLE_ENDIAN)
        {
                printf("the pc you use is in little mode!\n");
        }
        else
        {
                printf("the pc you use is in big mode!\n");
        }
        int a = 0x12345678;
        printf("%x's big mode is %x\n", a, GINT_TO_BE(a));
        printf("%x's little mode is %x\n", a, a);
        return 0;
}
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

以下是结果:
the pc you use is in little mode!
12345678's big mode is 78563412
12345678's little mode is 12345678
阅读(1602) | 评论(2) | 转发(0) |
0

上一篇:中国人民解放军军衔

下一篇:cpio

给主人留下些什么吧!~~