Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Сравнить две строки!   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.103 c
1-1145893629
sda
2006-04-24 19:47
2006.06.04
нужно ли перекрывать функцию?


2-1147806420
redlord
2006-05-16 23:07
2006.06.04
управление чужим приложением


2-1147692759
Тимофейка
2006-05-15 15:32
2006.06.04
shelllistview


4-1141653957
GrayFace
2006-03-06 17:05
2006.06.04
Получение содержимого регистров при исключении


1-1146111022
гога
2006-04-27 08:10
2006.06.04
Спецсимвол в компоненте Label