Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых) |
![]() |
eXeL@B —› Программирование —› Вычисление контрольнай суммы SFN в FAT |
Посл.ответ | Сообщение |
|
Создано: 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. Кстати, у меня есть исходники программы востановления, там таже проблема - вычисление суммы просто закомментирово. Может кто сталкивался? ![]() |
|
Создано: 17 марта 2008 10:43 · Поправил: tundra37 · Личное сообщение · #2 |
|
Создано: 20 марта 2008 14:07 · Поправил: Psychedelic · Личное сообщение · #3 |
|
Создано: 20 марта 2008 14:09 · Поправил: Psychedelic · Личное сообщение · #4 |
![]() |
eXeL@B —› Программирование —› Вычисление контрольнай суммы SFN в FAT |
Эта тема закрыта. Ответы больше не принимаются. |