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

Вниз

CompareStr vs StrComp   Найти похожие ветки 

 
Seldoff   (2007-07-05 17:00) [0]

почему код CompareStr и StrComp отличается? я не силён в ассемблере, но по-моему код отличается не в плане отличий AnsiString от PChar (которые судя по _LStrToPChar минимальны), а в плане алгоритма сравнения. зачем две функции для одной задачи? и, главное, будут ли их результаты одинаковыми для любых входных строк?

может кто-нибудь, знающий ассемблер, переведёт их код на паскаль чтобы сравнить поведение?


 
Сергей М. ©   (2007-07-05 17:20) [1]


> код отличается не в плане отличий AnsiString от PChar


Именно в этом плане и все принципиальные отличия между алгоритмами этих функций.


 
Anatoly Podgoretsky ©   (2007-07-05 18:33) [2]

> Сергей М.  (05.07.2007 17:20:01)  [1]

Вот более серьезное различие

StrComp - Note: When working with International characters, use AnsiStrComp instead.

CompareStr - The compare operation is based on the 8-bit ordinal value of each character and is not affected by the current locale.


 
Seldoff   (2007-07-05 18:53) [3]


> > код отличается не в плане отличий AnsiString от PChar
> Именно в этом плане и все принципиальные отличия между алгоритмами
> этих функций.

а в чём собственно отличие AnsiString и PChar?
AnsiString - ссылка на массив байт (символов) после которых стоит #0. по отрицательному смещению ещё есть 4 байта счётчика ссылок и 4 байта поля длины.
PChar - ссылка массив байт (символов) после которых стоит #0.
поправьте если я не прав. ну ещё конечно же компилятор сам выделяет\освобождает память для AnsiString, а для PChar нет, но в данном случае это некритично.


> Вот более серьезное различиеStrComp - Note: When working
> with International characters, use AnsiStrComp instead.CompareStr
> - The compare operation is based on the 8-bit ordinal value
> of each character and is not affected by the current locale.
>

и где отличие? CompareStr использует просто код символа для сравнения. StrComp тоже (судя по тому что есть AnsiStrComp, которая учитывает локаль).


 
Seldoff   (2007-07-05 18:55) [4]

в общем если бы я знал ассемблер я бы сам разобрался в отличиях работы, но т.к. я его не знаю :( приходится строить предположения. может кто-нибудь всё-таки переведёт на паскаль?


 
Seldoff   (2007-07-05 19:28) [5]

кстати, я говорил о BDS2006, сейчас посмотрел D7 - реализация StrComp отличается. в BDS2006 она более "хитрая".


 
Сергей М. ©   (2007-07-06 08:11) [6]


> Seldoff   (05.07.07 18:53) [3]



> поправьте если я не прав


Прав, все так и есть на самом деле.

Ну а раз AnsiString содержит служебные поля, то CompareStr использует их для ускорения сравнения в ряде ситуаций с содержимым сравниваемых строк.


 
REA   (2007-07-06 10:08) [7]

В BDS задействовали алгоритмы FastCode


 
Seldoff   (2007-07-06 13:24) [8]


> REA   (06.07.07 10:08) [7]
> В BDS задействовали алгоритмы FastCode

угу, мне интересно, почему StrComp взяли из FastCode, a CompareStr нет, хотя она тоже есть в FastCode.


 
clickmaker ©   (2007-07-06 15:10) [9]


> почему StrComp взяли из FastCode, a CompareStr нет

чтобы могли почувствовать разницу?



Страницы: 1 вся ветка

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
9-1159914093
Kavis
2006-10-04 02:21
2007.09.16
написал редактор анимации оцените


15-1187259332
Piter
2007-08-16 14:15
2007.09.16
Полетела Windows 2003 Server Datacenter Edition (eng)


15-1187730447
Германн
2007-08-22 01:07
2007.09.16
Обидный пробел в функциональности IDE Delphi (Д6)


15-1187771820
Jeer
2007-08-22 12:37
2007.09.16
Библиотека DC


15-1187480835
Черный Шаман
2007-08-19 03:47
2007.09.16
UAC в Vista и повышение привилегий ограниченного пользователя.