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は、2番目のバイトを10進数に変換していますか?またはビッグエンディアン形式に?なぜそれは最初のバイトではなく、2番目のバイトに対してのみ実行するのですか?
問題のバイトは[リトルエンディアン形式]です:
40 0B
最初に順序を切り替えて手動で変換してみました
0B 40
次に、16進数から10進数に変換すると、正しい出力が得られます。最初のバイトを2番目のバイトのビット単位のシフトに追加しても同じことがどのように行われるのかわかりません。ありがとう