这两天仔细研究了下FAT32,发现里面涉及到了一个大端、小端对齐有点意思,这里也简单总结一下。先在这里说明一下,MSP430是小端对齐的,还有FAT32文件系统中存放字段的顺序也是小端模式,所以用MSP430来实现FAT32文件系统的话,读取数据的时候不需要做特殊处理~
下面简单讲一下大端对齐和小端对齐。
我们知道,我们定义变量的时候,在内存中会给该变量分配一个位置,如果该变量是一个char型的变量,那么只会分配给它一个字节的位置,但是如果该变量int型或者long int型呢?这里以16位的C编译器编译结果来看的话,int型占2个字节,long int型占4个字节,那具体是如何分配呢?我们以0x12345678这个4字节数据为例。
如果在内存中,按地址从低往高,存储是4个字节的数据依次是0x78,0x56,0x34,0x12的话,则为小端存储,如下图所示;
如果在内存中,按地址从低往高,存储的4个字节的数据依次是0x12,0x34,0x56,0x78的话,则为大端存储如下图所示;
不同的CPU,对齐方式不同,所以如果我们在移植程序时,涉及到这种多个字节拼凑成多个字节的数据出问题时,可以考虑是否是内存对齐方式的问题。