字节大小端序问题总结

不同的 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;
}

你可能感兴趣的:(总结)