Вверх ↑
Ответов: 4655
Рейтинг: 760
#1: 2018-04-16 14:38:03 ЛС | профиль | цитата
Вылез тот же баг в файле CryptoUtils.pas в функции Endian64()


function Endian64(X: Int64): Int64;
begin
Result := (X and $00000000000000FF) shl 56;
Result := Result + (X and $000000000000FF00) shl 40;
Result := Result + (X and $0000000000FF0000) shl 24;
Result := Result + (X and $00000000FF000000) shl 8;
Result := Result + (X and $000000FF00000000) shr 8;
Result := Result + (X and $0000FF0000000000) shr 24;
Result := Result + (X and $00FF000000000000) shr 40;
Result := Result + (X and $FF00000000000000) shr 56;
end;

Предлагается:


function Endian64(X: Int64): Int64;
type
Ti64 = packed record
Lo, Hi: LongWord;
end;
begin
Ti64(Result).Lo := Endian(Ti64(X).Hi);
Ti64(Result).Hi := Endian(Ti64(X).Lo);
end;
Монструозная функция на ассемблере превращается в компактную:

карма: 26

0