大端机和小端机的区别
这里通过一个简单的例子,来描述这个问题。 假设我们要存储一个int类型的变量x=0x1234567,那在大端机和小端机里面会怎么存呢?
我们知道int类型占4个字节
- 大端机
在大端机里,地址向上生长,就会从下往上存放

- 小端机
在小端机里,地址向下生长,就会从上往下存放

- 内存的低地址处存放低字节,所以在强制转换数据时不需要调整字节的内容(比如把int的4字节强制转换成short的2字节时,就直接把int数据存储的前两个字节给short)
- 数值运算时从内存中依顺序依次从低位到高位取数据进行运算,小端模式下这样的运算方式会更高效
如何简易的判断大端机和小端机?
熟悉了小端机和大端机的区别之后,我们知道它们的区别就在于读写的顺序。可以通过这样子的一段代码来判断是小端机还是大端机
#include <iostream>
using namespace std;
int main()
{
int a = 1; //即0x00000001
int* p = &a;
char* c = reinterpret_cast<char*>(p); //类型转换,相当于char*(p)
if(*c==1)
cout<<"小端机"<<endl;
else
cout<<"大端机"<<endl;
return 0;
}
int a=1在大端机中存放会是这样子的:

所以当强制类型转换成char*来读取数据的时候,将会读出*c==0。反之小端机会读出*c==0