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