大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
big endian:最高字节在地址最低位,最低字节在地址最高位,依次排列。
little endian:最低字节在最低位,最高字节在最高位,反序排列。

如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
                big-endian     little-endian
0x0000     0x12              0xcd
0x0001     0x34              0xab
0x0002     0xab              0x34
0x0003     0xcd              0x12

    int i = 0x12345678;
    cout
<<hex<<(int)*(char*)&i<<endl;    //78,因为i的地址是低字节0x78的地址

x86系列则采用little endian方式存储数据。
C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而JAVA编写的程序则唯一采用big endian方式来存储数据。



位域也采用了类似little endian的存储方式:
先定义的位域存放在该字节的低位。
#include <iostream>


using namespace std;

union V 

struct X 
  unsigned 
char s1:2
  unsigned 
char s2:3
  unsigned 
char s3:3
}
 x; 
unsigned 
char c; 
}
 v; 

    
int main()
{
    v.c 
= 44;    // 001 011 00
    cout<<(int)v.x.s1<<endl;    // 0
    cout<<(int)v.x.s2<<endl;    // 3
    cout<<(int)v.x.s3<<endl;    // 1
    return 0;
}
posted on 2009-06-12 09:24 大胖 阅读(282) 评论(0)  编辑 收藏 引用 所属分类: Others

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理