如何解释*((char*)&a)

Nik*_*ntz 4 c endianness

我看到一种方法来了解平台的字节顺序是这个程序,但我不明白

#include <stdio.h>
int main(void)
{
  int a = 1;
  if( *( (char*)&a ) == 1) printf("Little Endian\n");
  else printf("Big Endian\n");
  system("PAUSE");  
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

测试做了什么?

Dou*_* T. 9

An int几乎总是大于一个字节,并且经常跟踪架构的字大小.例如,32位架构可能具有32位整数.因此,给定典型的32位整数,4字节的布局可能是:

   00000000 00000000 00000000 00000001
Run Code Online (Sandbox Code Playgroud)

或者首先使用最低有效字节:

   00000001 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

char*是一个字节,所以如果我们将这个地址转换为char*,我们将获得上面的第一个字节

   00000000
Run Code Online (Sandbox Code Playgroud)

要么

   00000001
Run Code Online (Sandbox Code Playgroud)

因此,通过检查第一个字节,我们可以确定体系结构的字节顺序.