大端小端存储模式的概念及判断

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44759710/article/details/100052441

大端小端概念

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

大端小端在计算机中用于解决多个字节类型数据的存储问题。计算机系统是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型等。对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,使得存在安排多个字节的问题,故此有了大端存储模式和小端存储模式。

例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。

大端小端特点

大端排序的好处是接收数据的程序可以优先得到数据的最高位,以便快速反应。
小端排序下,选定一个数据的起点后,只需要重复进位加法就可以实现高精度加法计算。
故串行通信(包括以太网、wifi、串口、usb等)如果采用大端编码有时会使系统响应更快速,有利于调试。而所有直接与硬件有关的代码都适合按小端排序。常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。具体可以从下面两张表反映:

常见CPU 存储模式
PowerPC 大端
IBM 大端
Sun 大端
x86 小端
DEC 小端
ARM 大端或小端
常见文件 存储模式
Adobe PS 大端
JPEG 大端
MacPaint 大端
BMP 小端
GIF 小端
RTF 小端
DXF(AutoCAD) 大端或小端

一般操作系统都是小端,而通讯协议是大端的,另外:Java和所有的网络通讯协议都是使用Big-Endian的编码

大端小端判断

可通过以下程序来判断机器的字节序:
方法一:

int check_sys()
{
   int i = 1;
   return (*(char *)&i);
}
int main()
{
   int ret = check_sys();
   if(ret == 1)
   {
      printf("小端\n");
   }
   else
   {
      printf("大端\n");
   }
   return 0; 
}

方法二:

int check_sys()
{
   union{
    int i;
    char c;
    }un;
   un.i = 1;
   return un.c; 
}

猜你喜欢

转载自blog.csdn.net/qq_44759710/article/details/100052441
今日推荐