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

Big-Endian大端模式和Little-Endian小端模式
定义
- Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
- Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
- 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序.
- 高/低字节定义:在十进制中我们都说靠左边的是高位,靠右边的是低位,在其他进制也是如此。就拿 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);  
    }
    【最是那一低头的温柔】
【好像水莲花不胜凉风的娇羞】
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号