? ? ? ? 今天说一下什么是大小端模式?
? ? ? ? 大小端模式指的是什么?通常我们在存储器当中存储数据的字节顺序,注意这里强调的是“字节的顺序”。因为在计算机系统中,不管是单片机DSP或者是X86,我们说一个地址对应的存储空间大小呢就是一个字节,也就是以字节为单位的。
? ? ? ? 我们在写代码的时候,肯定不仅仅是只去写定义,比如8位这样的数据类型,肯定还有16位的(2个字节),32位的(4个字节)这样的数据。那么对于超过8位的这样的数据,当要存储的时候,就会涉及到一个排序的问题。那么这个排序的问题,也就是大小端的问题。
? ? ? ? 比如说,我们要存储一个32位的数据0x11223344,这个16进制的数,这个数据本身11在这个数据里面它就是高字节,44在这个数据里面就是低字节。我们说的是这个数据本身。那么当我们要把这个数据保存到存储空间或者是Flash或者是内存当中的时候就会涉及到排序,也就是一再强调的大小端问题。
? ? ? ? 比如说我们存储到内存,内存的一个地址是从0x2000000到0x20000003四个字节的存储空间当中,如果是大端的模式,就是这个硬件平台是大端的模式,那么就会将11,也就是高字节存储到低地址当中。也就是低地址存储高字节,高地址存储低字节,这就是大端模式。
? ? ? ? 小端模式就正好相反:低地址存储低字节,高地址存储高字节。
?
? ? ? ? 上面所说的就是这个大小端问题。其实大小端不光会涉及到在存储这个场景,也会涉及到别的,例如我们在做一些通信数据解析的时候,比如说model bus,can总线也会涉及到大小端。
? ? ? ? 比如说我们要传输这个数据0x11223344,那么这个总线的协议,协议里面就会去规定是先传输高字节,还是先传输低字节。总线协议里面也会有这个格式,这个其实也是大小端问题。?