我正在尝试理解和实现一个基于 FAT12 的简单文件系统。我目前正在查看以下代码片段,它让我发疯:
int getTotalSize(char * mmap)
{
int *tmp1 = malloc(sizeof(int));
int *tmp2 = malloc(sizeof(int));
int retVal;
* tmp1 = mmap[19];
* tmp2 = mmap[20];
printf("%d and %d read\n",*tmp1,*tmp2);
retVal = *tmp1+((*tmp2)<<8);
free(tmp1);
free(tmp2);
return retVal;
};
从我目前所读到的,FAT12 格式以小端格式存储整数。上面的代码正在获取存储在引导扇区的第 19 和第 20 字节中的文件系统的大小。
但是我不明白为什么
retVal = *tmp1+((*tmp2)<<8);
作品。是按位 <<8 将第二个字节转换为十进制吗?还是大端格式?为什么它只对第二个字节而不是第一个字节?
有问题的字节是[小端格式]:
40 0B
我尝试通过先将顺序切换为手动转换它们
0B 40
然后从十六进制转换为十进制,我得到了正确的输出,我只是不明白如何将第一个字节添加到第二个字节的按位移位中做同样的事情?谢谢