2013-06-03 29 views
5

有一堆的方式,你可以比較現代德爾福字符串(比如2010 - XE3):Delphi字符串比較函數有什麼區別?

  • '< =' 操作解析爲UStrCmp/LSTRCMP
  • CompareStr
  • AnsiCompareStr

原則上,有人可以給(或指出)這些方法做什麼的描述嗎?

到目前爲止,我認爲AnsiCompareStr在Windows上調用CompareString,這是一個「文本」比較(即考慮到unicode組合字符等)。簡單的CompareStr不會這樣做,而是似乎進行二進制比較。

但是CompareStr和UStrCmp有什麼區別?在UStrCmp和LStrCmp之間?他們都產生相同的結果嗎?德爾福版本之間的結果會發生變化嗎?

我在問,因爲我需要一個總是會產生相同結果的比較,因此使用Delphi的一個版本構建的應用程序中的索引與使用另一個版本構建的代碼保持一致。

回答

7

AnsiCompareStr的說明中將語言環境考慮,也不管Delphi版應返回相同的結果,但可返回基於Windows版本和/或設置不同的結果.. CompareStr是一個純二進制比較:「比較操作是基於每個字符的16位序數值,並且不受當前語言環境的影響「(針對CompareStr(const S1, S2: string)過載)。 UStrCmp也使用純二進制比較:「字符串根據組成字符串的字符的序數值進行比較。」所以後兩者應該沒有區別。他們返回結果的方式是不同的,所以需要兩個實現(儘管可以使其中一個依賴於另一個)。

至於LStrCmpUStrCmp之間的差異,需要LStrCmpAnsiString S,UStrCmp需要UnicodeString秒。完全有可能兩個字符(比如A和B)在錯誤的「ANSI」代碼頁中排序爲A < B,但按Unicode排序爲A> B。您應該幾乎總是使用適合數據的比較你有。

相關問題