Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Вычисление контрольнай суммы SFN в FAT
Посл.ответ Сообщение

Ранг: 8.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 марта 2008 23:12 · Поправил: Psychedelic
· Личное сообщение · #1

То ли изменился алгоритм вычисления контрольной суммы, то ли что..
Вобщем необходимо вычислить сумму для SFN (Short FileName) стуктуры чтобы сравнить ее с
LFN (Long FileName) стуктурой директории FAT. (Проверяю на FAT16)

Вычисляю как указано в доках, к примеру здесь : http://www.teleport.com/~brainy/lfn.htm http://www.teleport.com/~brainy/lfn.htm (внизу).

Т.е. делаю Rotate битам вправо, затем прибавляю код ASCII символа. Код там также есть.

Либо делал еще так (понятней):

unsigned char sfn_checksum(const unsigned char *pFcbName)
{
int i;
unsigned char sum=0;

for (i=11; i; i--)
sum = ((sum & 1) << 7) | (sum >> 1) + *pFcbName++;
return sum;
}


На делфи это будет примерно так :

function GenerateCheckSum: byte;
var
i: integer;
begin
Result := 0;
for i := 0 to Length(fDirEntry.FileName.Name) do
Result := (Result shl 7) or (Result shr 1) + Byte(fDirEntry.FileName.Name[i]);
end;

Name - массив из 11 char ов

Кучу вариантов перебробовал, ничего не получается. Код 100% правильный (т.к. простой), но вот правильный ли алгоритм... сумма указанная в LFN отличается от вычисленной в SFN.
Кстати, у меня есть исходники программы востановления, там таже проблема - вычисление суммы просто закомментирово.
Может кто сталкивался?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 17 марта 2008 10:43 · Поправил: tundra37
· Личное сообщение · #2

Psychedelic В Си цикл крутится от 0 до 10, а у тебя от 0 до 11.
Ну и маска не помешает, т.к. многие компиляторы не делают байтовых операций, а шуруют
16 бит.



Ранг: 8.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 марта 2008 14:07 · Поправил: Psychedelic
· Личное сообщение · #3

Действительно. Ну я и лоханулся блин... Тема закрыта..
Спасибо за ответ..



Ранг: 8.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 марта 2008 14:09 · Поправил: Psychedelic
· Личное сообщение · #4

Closed


 eXeL@B —› Программирование —› Вычисление контрольнай суммы SFN в FAT
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати