Delphi的字符串比较函数有什么区别?

5
在现代Delphi(例如2010-XE3)中,有多种比较字符串的方法:
-“<=”运算符,解析为UStrCmp / LStrCmp -CompareStr -AnsiCompareStr 请问有人能提供(或指向)这些方法的原理描述吗?
到目前为止,我已经知道AnsiCompareStr在Windows上调用CompareString,这是一种“文本”比较(即考虑unicode组合字符等)。简单的CompareStr不会这样做,似乎会进行二进制比较。
但是CompareStr和UStrCmp之间有什么区别?UStrCmp和LStrCmp之间有什么区别?它们是否都产生相同的结果?这些结果在Delphi版本之间是否会更改?
我之所以问这个问题,是因为我需要一个始终产生相同结果的比较方法,以便使用一个Delphi版本构建的应用程序中的索引与使用另一个版本构建的代码保持一致。
1个回答

7

AnsiCompareStr 考虑到本地化,并应返回相同的结果,不管 Delphi 版本如何,但可能根据 Windows 版本和/或设置返回不同的结果。 CompareStr 是纯二进制比较:"比较操作基于每个字符的 16 位序值,并且不受当前区域设置的影响"(对于 CompareStr(const S1, S2: string) 重载)。UStrCmp 也使用纯二进制比较:"字符串按构成字符串的字符所组成的序数值进行比较"。因此,后两者之间不应有区别。它们返回结果的方式不同,因此需要两种实现(尽管可以使其中一种依赖另一种)。

至于 LStrCmpUStrCmp 之间的差异,LStrCmp 接受 AnsiStringUStrCmp 接受 UnicodeString。 完全有可能两个字符(比如 A 和 B)在误命名的“ANSI”代码页中是按顺序排列的,即 A<B,但在 Unicode 中可能是 A>B。 您应该几乎总是使用适用于您拥有的数据的比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接