qey

Atitude is Everything.-- 关注C/C++,关注Linux(Unix) ,关注网络。 Better Late Than Never.
随笔 - 4, 文章 - 13, 评论 - 7, 引用 - 0
数据加载中……

little endian和big endian 基本概念

little endian和big endian 基本概念

        little endian和big endian是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式。说到这,就要牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而主流cpu,intel的x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是 little endian呢?
        假设从地址0x00000000开始的一个字中保存有数据0x1234abcd,那么在两种不同的内存顺序的机器上从字节的角度去看的话分别表示为:
       (1)little endian:在内存中的存放顺序是(需要知道的是在C中的数据指针是指向低地址的)
            0x00000000-0xcd,0x00000001-0xab,0x00000002-0x34,0x00000003-0x12
       (2)big  endian:在内存中的存放顺序是
            0x00000000-0x12,0x00000001-0x34,0x00000002-0xab,0x00000003-0xcd
       需要特别说明的是,以上假设机器是每个内存单元以8位即一个字节为单位的。
       简单的说,ittle endian把低字节存放在内存的低位;而big endian将低字节存放在内存的高位。 


#include <cstdio>
#include 
<cassert>
#include 
<iostream>
using namespace std;

typedef union {
    
int memnum;
    
char ch[sizeof(int)];
} INTCHAR;

void reverseCharArray(INTCHAR* src)
{
    
char ch;
    
for(int i=0; i<2; i++)
    {
        ch 
=src->ch[i];
        src
->ch[i] =src->ch[3-i];
        src
->ch[3-i] =ch;
    }
}

int main(int argc, char* argv[])
{    
    INTCHAR numTest;
    numTest.memnum 
=0x61626364;

    cout
<< hex<< (int)numTest.memnum <<endl;
    reverseCharArray(
&numTest);
    cout
<< hex<< (int)numTest.memnum <<endl;

    system(
"pause");
    
return 0;
}

// 执行结果:
// 61626364
// 64636261
// 请按任意键继续. . .


基本上是转贴,来自
http://www.chinaunix.net/jh/23/823662.html

posted on 2008-11-13 22:08 无声无色 阅读(181) 评论(0)  编辑 收藏 引用 所属分类: 概念参考


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