FAT32ファイルシステムイメージを移動できるプログラムをCで作成しようとしています。しかし、正しいデータを収集するための方程式を理解して適用するのに苦労しています。私はLinuxのDebianディストリビューションを使用しているので、リトルエンディアン形式が維持されます。以下は、FAT32に関するMicrosoft Webサイトの擬似コードであり、ディレクトリまたはファイルにアクセスする次のクラスターを計算します。
ThisFATSecNum = BPB_ResvdSecCnt + (FATOffset / BPB_BytsPerSec);
ThisFATEntOffset = REM(FATOffset / BPB_BytsPerSec);
FAT32ClusEntryVal = FAT32ClusEntryVal & 0x0FFFFFFF;
*((DWORD *) &SecBuff[ThisFATEntOffset]) =
(*((DWORD *) &SecBuff[ThisFATEntOffset])) & 0xF0000000;
*((DWORD *) &SecBuff[ThisFATEntOffset]) =
(*((DWORD *) &SecBuff[ThisFATEntOffset])) | FAT32ClusEntryVal;
SecBuff文字配列が何をしているのか、何にアクセスしているのかを完全には理解していません。DWORDはunsignedintであると想定されており、後続のキャストも理解できません。どんな光の小屋も大歓迎です。
クラスターに基づいてFAT32ファイルシステムをどのように移動するかについて誰かが説明できれば、非常にありがたいです。クラスターの割り当てによって空間的な局所性が確保されている場合でも、セクターを参照する方が効果的であるように思われます。ファイル/フォルダーの次のクラスターを見つけるためにバイト読み取りを行う方法を完全には理解していません。