![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |