Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизСравнить две строки! Найти похожие ветки
← →
KLAUS © (2006-05-20 14:11) [0]Всем Привет!!
Народ подскажите как сравнить две строки по байтно?
Только без WildStringCompare!
← →
Glex © (2006-05-20 14:19) [1]
function CompareStr(const s1, s2: string): boolean;
var i, N: integer;
begin
N := Min(length(s1), length(s2));
result:=true;
for i:=1 to Min do begin
if s1[i]<>s2[i] then begin
result:=false;
exit;
end;
end;
if length(s1)<>length(s2) then result:=false;
end;
Это что ли? =))
← →
KLAUS © (2006-05-20 18:40) [2]THANKS вообще в самую точку!!!
← →
AlexWlad © (2006-05-20 20:53) [3]Если нужна скорость попробуй такую процедуру.
function AW_CompareMem(P1, P2: Pointer; Length: Integer): Integer; assembler;
asm
PUSH ESI
PUSH EDI
MOV ESI,P1
MOV EDI,P2
MOV EDX,ECX // Length
XOR EAX,EAX
AND EDX,3 // число байт в хвосте - Length mod 4
SHR ECX,1 // div 2 - WORD
SHR ECX,1 // div 2 - DWORD
REPE CMPSD
JE @@1 // все DWORD равны, анализ хвоста
SUB ESI,4 // поиск байта-отличия в DWORD
SUB EDI,4
MOV EDX,4
@@1: MOV ECX,EDX // сравнение в хвосте
REPE CMPSB
JE @@5 // все BYTE равны
MOVZX EAX,BYTE PTR [ESI-1] // вычисление разницы байт
MOVZX EDX,BYTE PTR [EDI-1]
SUB EAX,EDX
@@5: POP EDI
POP ESI
end;
Пример использования
i := AW_CompareMem(@s1[1],@s2[1],Min(Length(s1),Length(s2)));
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.048 c