在讲C语言的时候,有讲到大小端的内容,这里呢对大小端的相关内容进行了整理,有需要的可以参考一下!
大端和小端来自一个小故事:端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。
在内存中,数据是以字节(8bit)存储的,当存储16bit的int或者32bit的long(与操作系统有关),就面临着大端 (Big-Endian) 存储还是小端 (Little-Endian) 存储的问题。下面解释一下大端存储和小端存储的概念。
大端存储:高字节存储在低地址中,即高位先存;
小端存储:低字节存储在高地址中,即低位先存。
其实这两个概念不难理解,但是比较容易记混。由于大端序和小端序都是从存储器的低地址开始向高地址存储数据,不同的是一个字数据中先存高字节还是先存低字节。可以记住这样一个口诀:“高大低小”。“高”是指高字节,“大”是指大端序,“低”是指低字节,“小”是指小端序,“高大低小”也即先存高字节为大端序,先存低字节为小端序。
举个例子说明这个问题:
位宽为32bit的CPU,要存储的字数据为0x12345678,起始地址为0x4000。
大端存储如下:
小端存储如下:
一般地,Intel系列的CPU采用小端存储,KEIL C51则为大端存储。 同时,在网络传输中,网络协议需要指定网络字节顺序,TCP/IP协议中使用16位整数和32位整数的高位先存模式,对应我们的大端模式。
以上就是计算机中的大小端的存储模式。