如何判断大端小端

字节序有两种:大端序、小端序,我们日常使用的系统(Linux、Windows)都是以小端顺序存储字节

看一个检查大小端的例子

#include <stdio.h>
int main()
{
  short int a = 0xAABB; // 1010 1010 | 1011 1011
  char *p = &a;

  int arr[3];
  arr[1] = *p; // 1010 1010
  arr[2] = *(p + 1); // 1011 1011

  if (arr[1] == 0xAA) {
    printf("is big endian\n");
  } else {
    printf("is little endiam\n");
  }
  return 0;
}

代码中十六进制0xAABB可表示两个字节,其中AA是高位,BB是低位

a是短整型占2字节,用字符型char(占1字节)将a分割成AABB两块。如果本机是按大端排序的话,AA作为高位应该放在低地址区,即指针p所指的a的起始位置。相反如果是小端序,低地址位应存储地位BB

大小端序

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低

猜你喜欢

转载自www.cnblogs.com/wangyubjhd/p/10281136.html