大端模式和小端模式

一、什么是大端、什么是小端?

    0x123456在内存中的存储方式

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

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

    - 小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。和我们的逻辑方法一致。

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

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


二、为什么会有大小端之分?

    
    1. 一开始是由于不同架构的CPU处理多个字节数据的顺序不一样,比如x86的是小端模式,KEIL C51是大端模式。但是后来互联网流行,TCP/IP协议规定为大端模式,为了跨平台通信,还专门出了网络字节序和主机字节序之间的转换接口(ntohs、htons、ntohl、htonl)

    2. 大小端模式各有优势:小端模式强制转换类型时不需要调整字节内容,直接截取低字节即可;大端模式由于符号位为第一个字节,很方便判断正负。


三、怎样判断大小端

    基本思想:根据数据截断来判断是大端还是小端
    1.通过强制类型转换
    
 BOOL IsBigEndian()
 {
 	int a = 0x1234;
 	char b = *(char*)&a;
 	if(0x12 == b)
 	{
 	    return TRUE;
 	}
 	
	return FALSE;
  }
    2.利用联合体共享内存的特性,截取低地址部分
 BOOL IsBigEndian()
  {
 	union NUM
 	{
 	    int  a;
 	    char b;
 	}num;
 	
 	num.a = 0x1234;
 	
 	if(0x12 == num.b)
 	{
 	    return TRUE;
 	}
 	
 	return FALSE;
  }


全部评论

相关推荐

04-08 13:31
已编辑
门头沟学院 前端工程师
D0cC:京东营收1万多亿人民币,阿里9000多亿,虽然他俩利润都没腾讯和字节多,但是很恐怖了啊,负担了多少打工人的薪水
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务