一、定义
大端模式:
大端模式就是指把数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中,这和我们一般的阅读顺序是一致的。
小端模式:
小端模式与大端模式相反,数据的高字节位置保存在内存的高地址处,数据的低字节保存在内存的低地址处。这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
图解
画张图简单解释下大小端的区别,比如我们要存取一个0x12345678的数据,在大小端机器的存取方式分别是:

二、判断机器大小端方式
字符指针判断
在32位平台下,int占4个字节,而char类型的指针是占一个字节的,如果我们把int强传为char类型的指针,只会保存第一个字节的数据,那么我们只需要判断char里面的第字节和int里面的第一个字节是否是一致即可判断。
如果一致则为小端模式,反之为大端模式。
#include <iostream>
using namespace std;
int main()
{
int a = 1;
//0x00 00 00 01 大端存储方式
//0x01 00 00 00 小端存储方式
//char 只存一个字节
//大端 0x00 == 0
//小端 0x01 == 1
if (*(char*)&a == 1)
cout << "小端模式" << endl;
else
cout << "大端模式" << endl;
return 0;
}
大端转换成小端模式:
32位:
#define swap32Big2Little(x) ( ( (x)&(0x0000ffff) ) << 32 | ( (x)&(0xffff0000) >> 32 )
64位:
#define swap64Big2Little(x) ( ( (x)&(0x00000000ffffffff) ) >> 64 | ( (x)&(0xffffffff00000000) >>64 )
网友评论