如何简易的判断大端机和小端机?

1,320 阅读2分钟

大端机和小端机的区别

这里通过一个简单的例子,来描述这个问题。 假设我们要存储一个int类型的变量x=0x1234567,那在大端机和小端机里面会怎么存呢?

我们知道int类型占4个字节

  1. 大端机

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

大端优点:符号位在所表示的数据的内存的第一个字节中,便于快速判断数据的正负

  1. 小端机

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

小端优点:

  1. 内存的低地址处存放低字节,所以在强制转换数据时不需要调整字节的内容(比如把int的4字节强制转换成short的2字节时,就直接把int数据存储的前两个字节给short)
  2. 数值运算时从内存中依顺序依次从低位到高位取数据进行运算,小端模式下这样的运算方式会更高效

如何简易的判断大端机和小端机?

熟悉了小端机和大端机的区别之后,我们知道它们的区别就在于读写的顺序。可以通过这样子的一段代码来判断是小端机还是大端机

#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