zoukankan      html  css  js  c++  java
  • 大端模式和小端模式

    大端模式和小端模式

    0x123456在内存中的存储方式

    • 大端模式

      低地址 -----> 高地址
      0x12 | 0x34 | 0x56 
      
    • 小端模式

      低地址 -----> 高地址
      0x56 | 0x34 | 0x12 
      

    不难看出大端模式比较符合人的直观认识。

    为什么会有大小端之分呢

    1. 一开始是由于不同架构的CPU处理多个字节数据的顺序不一样,比如x86的是小段模式,KEIL C51是大端模式。但是后来互联网流行,TCP/IP协议规定为大端模式,为了跨平台通信,还专门出了网络字节序和主机字节序之间的转换接口(ntohs、htons、ntohl、htonl)
    2. 大小端模式各有优势:小端模式强制转换类型时不需要调整字节内容,直接截取低字节即可;大端模式由于符号位为第一个字节,很方便判断正负。

    判断机器的字节序

    基本思想室根据数据截断来判断是大端还是小端

    // 通过强制类型转换截断
    BOOL IsBigEndian()
     {
    	int a = 0x1234;
    	char b = *(char*)&a;
    	if(0x12 == b)
    	{
    		return TRUE;
    	}
    	
    	return FALSE;
     }
    
    // 利用联合体共享内存的特性,截取低地址部分
     BOOL IsBigEndian()
     {
    	union NUM
    	{
    		int  a;
    		char b;
    	}num;
    	
    	num.a = 0x1234;
    	
    	if(0x12 == num.b)
    	{
    		return TRUE;
    	}
    	
    	return FALSE;
     }
    
  • 相关阅读:
    thinkphp SAE
    thinkphp rpc
    thinkphp REST
    thinkphp 图形处理
    thinkphp 验证码
    thinkphp 文件上传
    thinkphp 数据分页
    thinkphp 多语言支持
    thinkphp cookie支持
    thinkphp session支持
  • 原文地址:https://www.cnblogs.com/huluwa508/p/10827280.html
Copyright © 2011-2022 走看看