1、定义:
字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、
大端
两种字节顺序。
不同的平台会有不同的处理方式。
小端
字节序
指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;
例如像地址a写入0x0A0B0C0D之后,在内存中的数据便是:
大端
字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。
通常来讲,CPU只是简单的从内存中读取和存储数据,然后按照你你程序需要的格式提交,所以架构是小端字节序或是大端字节序不是特别重要。但是当数据替换到不同的平台系统时,系统必须符合数据的格式。
基于X86平台的PC机都是小端字节序的,而有的嵌入式平台则是大端字节序。因而对大于1字节的数据,都要变换其存储顺序。
2、大小端字节序判断:
int IsVAXOrder(void)
{
short x, *px;
unsigned char *pc;
px = &x;
pc = (unsigned char *) px;
*pc = 1;
*(pc+1) = 0;
if (x == 1)
return 1; //存储为1 0, 返回1,表示是小端字节序
else
return 0; //存储为0 1, 否则是大端字节序
}
3、大小端字节序转换:
如果需要转换字节序列,只需写出相应的转换函数即可
template<class T>
T SwapData(T p)
{
int len = sizeof(T);
char tmp;
char *ptr = (char*)&p;
for(int i=0; i<len/2; i++)
{
tmp = ptr[i];
ptr[i] = ptr[len-1-i];
ptr[len-1-i] = tmp;
}
return p;
}