不同的 CPU 有不同的字节序类型,字节序是指数据在内存中的保存顺序,可分为两种:
1>. Little endian :将低序字节存储在起始地址
2>. Big endian : 将高序字节存储在起始地址
例如:若我们将 0x1234abcd 写入到以 0x0000 开始的内存中,其中:12字节相较cd字节,被称为高序字节,而cd字节则被成为低序字节,则结果为:
低 - - - - - - - - - - - >高
地址 0x0000 0x0001 0x0002 0x0003
大端对齐: 0x12 0x34 0xab 0xcd
小端对齐: 0xcd 0xab 0x34 0x12
为便于区分,有一个规律:
小端对齐: 高序字节存储于内存高地址处, 而大端对齐则恰恰相反。
一般来说,Intel、mipse处理器使用的是小端(little endian),Moto处理器使用的是大端对其。
值得注意的是:网络传输的数据采用的是大端对齐的方式,由于大部分x86主机是以低位字节优先方式存储数据的,因而在Internet上传输数据时就需要进行转换。
附一个检查当前cpu大小端对齐的方法:
#include "stdafx.h"
#include <iostream>
using namespace std;
union
{
short s;
char c[sizeof(short)];
}data;
void checkEndian()
{
data.s=0x0102;
if(sizeof(short)==2)
{
if(data.c[0]==1 && data.c[1]==2)
{
cout<<"big-endian"<<endl;
}
else if(data.c[0]==2 &&data.c[1]==1)
cout<<"little-endian"<<endl;
else
cout<<"unkown"<<endl;
}
}
int main(int argc, char * argv[])
{
checkEndian();
return 0;
}