Список кластеров FAT - это просто массив, в котором записи в массиве являются следующим индексом в цепочке кластеров файла.Запись файла в каталоге сообщает вам местоположение первого кластера (в примере, кластер 0x002).Чтобы найти следующий кластер, посмотрите на индекс 0x002 в массиве FAT:
next_cluster = FAT[0x002];
Например, если FAT[0x002]
содержит 0x014, то это кластер, который будет содержать следующий набор данных для файла, тогда вы будете искать в FAT[0x014]
3-й кластер и т. д.
Если вы имеете дело с 12-битной FAT, это означает, что у вас есть небольшая сложность в индексации массива.Я думаю, что индексирование происходит примерно так:
// find the 16-bit word that contains the 12-bit FAT entry
uint16_t tmp = ((uint16_t*)(((char*)FAT) + index + (index / 2)));
// keep either the high 12-bits or low 12-bits depending on if the
// index is even or odd.
next_cluster = (tmp >> ((index % 2) ? 4 : 0)) & 0x0fff;
Конечно, это основано на FAT в памяти.Если FAT читается с носителя, вам необходимо соответствующим образом преобразовать в сектор для чтения (и смещения в сектор).