![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли как-то оптимизировать этот код (для скорострельности)? [D7, WinXP]
Aleksandr. © (2004-09-27 12:50:00)Он работает, но на большом количестве данных заметны тормоза. Смысл в том, что кодируемая строка "доливается" до заданной длины константной строкой и своей длиной, потом ксорится. Расшифровка в обратной последовательности. Id может быть разным:
function EncodeByID(const S : string; const ID : integer=3) : string;
var
mPos : byte;
i : integer;
begin
mPos:=length(s);
Result:=IntToHex(mPos,1)+Copy(DefCodeKeyStr,1,length(DefCodeKeyStr)-length(s))+s;
for i:=1 to length(Result) do
Result[i]:=Chr(Ord(Result[i]) XOR ID)
end;
function DecodeByID(const S : string; const ID : integer=3) : string;
var
mPos : byte;
i : integer;
begin
mPos:=StrToInt('$'+Chr(Ord(s[1]) XOR ID));
Result:=Copy(s,length(DefCodeKeyStr)-mPos+2,mPos);
for i:=1 to length(Result) do
Result[i]:=Chr(Ord(Result[i]) XOR ID)
end;
Aleksandr. (2004-09-27 14:20:00) [1]Удалено модератором
panov (2004-09-27 13:34:00) [2]>Aleksandr. (27.09.04 13:26) [2]
Преобразуй в текстовый вид (HEX) и сохраняй в таком виде.
Anatoly Podgoretsky (2004-09-27 13:34:00) [3]Преобразовывать в воспринимаемый набор
Aleksandr. (2004-09-27 13:26:00) [4]Спасибо. Может, заодно подскажете, как сделать, чтобы результаты XOR'a всегда были в наборе допустимых символов? А то результаты попадают в таблицу BDE, которая хрен пропустит что-то из служебных?
PVOzerski (2004-09-27 12:55:00) [5]Может, SetLength+Move вместо Copy и убыстрят, но это надо проверять. Еще вариант: если длины строк неикогда не больше 255, использование ShortString'ов позволит избежать динамического перевыделения памяти.