大端模式和小端模式

Posted AlphaABCD

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大端模式和小端模式相关的知识,希望对你有一定的参考价值。

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

0x123456在内存中的存储方式

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

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

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

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

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

三、怎样判断大小端

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

1、通过强制类型转换截断

 BOOL IsBigEndian()
 
 	short a = 0x1234;
 	char b = *(char*)&a;
 	if(0x12 == b)
 	
 	    return TRUE;
 	
 	
	return FALSE;
  

2、利用联合体共享内存的特性,截取低地址部分

  BOOL IsBigEndian()
  
 	union NUM
 	
 	    short  a;
 	    char b;
 	num;
 	
 	num.a = 0x1234;
 	
 	if(0x12 == num.b)
 	
 	    return TRUE;
 	
 	
 	return FALSE;
  

以上是关于大端模式和小端模式的主要内容,如果未能解决你的问题,请参考以下文章

详解大端模式和小端模式

大端模式和小端模式

详解大端模式和小端模式

大端模式和小端模式

大端模式和小端模式

大端模式和小端模式