![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Есть строка:
$7F $D9 $91 $AB $6E $CB ...... (размер 20мб) Ее нужно посчитать: 7FD9 + 91AB + 6ECB = 1804F ( т.е.) 32729 + 37291 + 28363 = 98383 (т.е.) (1804F) Из того что есть (очень медленно) это получаю в цикле и склеиваю в строку '$7FD9' после складываю... Пытался работать с массивом но из него не знаю как получить 2 значения только file[i] т.е. опять склеивать ![]() Просто складывать по одному байту file[i] получается раз в 20 быстрее... |
#2
|
|||
|
|||
![]() Переходите от array of Byte к array of Word
|
#3
|
|||
|
|||
![]() получается так:
1B 25 - 9499 2D 31 -12589 = 22088 HEX(5648) а если в калькуляторе(hex) сложить 1B25+2D31 =4856 не совсем понимаю магию чисел ![]() ![]() |
#4
|
|||
|
|||
![]() Вроде разобрался...
|
#5
|
|||
|
|||
![]() Код:
function CheckSum(blockStrpos,blockEndPos:Integer):string; VAR i: integer; sum: integer; Result2: string; begin sum := 0; i:=0; for i := 0 to 884734 do begin sum := sum +file[i]; // array of world end; Result2:=IntToHex(sum,8); Result:=Result2+'/'+inttostr(sum)+'/'+inttostr(Length(file)+' i '+inttostr(i); end; подскажите что не правильно делаю... не выдает нужного мне результата хотя считает(вначале) вроде все верно... ![]() Последний раз редактировалось Admin, 18.09.2011 в 18:14. |
#6
|
|||
|
|||
![]() Вот функция которая тормозит но выдает нужный результат...
Код:
function CheckSum2(file:string; blockStrpos,blockEndPos:Integer):string; VAR i,b,c:Integer; a:string; begin result:=''; for i:=1 to 1769472 do begin a:= a + IntToHex(ord(file[i]),2); if Length(a)=4 then begin c:= c + Strtoint('$'+a); a:=''; end ; end; Result:=IntToHex(c,2); Result:=Copy(Result,Length(Result)-3,4); if Length(a)>0 then Result:=''; end; Последний раз редактировалось Admin, 18.09.2011 в 18:15. |