什么是大b端小b端(简单理解大小端那些事儿)(1)

什么是计算机大小端?简单来说,大小端(Endian)是指数据存储或者传输时的字节序,大小端分大端和小端。

所谓大端(Big-Endian)模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。

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

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

对于32位的数据也是一样,比如0x1A2B3C4D,在大端模式下存储就是1A 2B 3C 4D,而小端模式则为4D 3C 2B 1A。

我们常用的x86结构就是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。常见的windows、Linux系统都是小端模式,网络传输则是大端模式,因此用网络传输数据时,如果完全是字节数据还无所谓,但是如果传输short,int这种多字节单位,就需要注意顺序。系统为了应用不考虑这个问题,提供了相应的函数:1、发送的时候使用:htons(n) 2、接受的时候使用:ntohs(n),而不要理会两边的通信是否需要这么做,在编写网络程序时最好用这两个函数。

那么如何来判断自己的系统是大端还是小端呢?下面就是最简单的判断方法:

什么是大b端小b端(简单理解大小端那些事儿)(2)

大家如果对编程感兴趣,想了解更多的编程知识,解决编程问题,我们这里有java高手,C /C高手,windows/Linux高手,android/ios高手,请大家关注我的程序员互动联盟或者coder_online

,