(深入理解计算机系统)大端模式和小端模式

计算机系统

Big-Endian大端模式和Little-Endian小端模式

定义

  1. Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
  1. Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
  2. 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序.
  3. 高/低字节定义:在十进制中我们都说靠左边的是高位,靠右边的是低位,在其他进制也是如此。就拿 0x12345678来说,从高位到低位的字节依次是0x12、0x34、0x56和0x78.

例子分析:

	unsigned int value = 0x12345678

1.Big-Endian: 低地址存放高位

栈底 (高地址)
buf[3] (0x78) 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) 高位
栈顶 (低地址)

2.Little-Endian: 低地址存放低位

栈底 (高地址)
buf[3] (0x12) 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) 低位
栈 顶 (低地址)

在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)

内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x78 0x56 0x34 0x12

在Big- endian模式CPU内存中的存放方式则为

内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x12 0x34 0x56 0x78

注意:通常我们说的主机序(Host Order)就是遵循Little-Endian规则。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序 (Little-Endian)和网络序(Big-Endian)的转换。
检查CPU是大端还是小端:

    int checkCPU(void)  
    {  
    	union  
    	{  
    		int a;  
    		char b;  
    	}c;  
    	c.a = 1;  
    	return (c.b == 1);  
    }
posted @ 2016-07-24 15:23  跑马灯的忧伤  阅读(686)  评论(0编辑  收藏  举报