加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:32:16 所属栏目:大数据 来源:网络整理
导读:有很多方法可以比较现代Delphi中的字符串(比如2010-XE3): ’ ='运算符,解析为UStrCmp / LStrCmp CompareStr AnsiCompareStr 原则上,有人可以给出(或指向)这些方法的描述吗? 到目前为止,我已经认为AnsiCompareStr在Windows上调用CompareString,这是一种“文
有很多方法可以比较现代Delphi中的字符串(比如2010-XE3):

>’< ='运算符,解析为UStrCmp / LStrCmp
> CompareStr
> AnsiCompareStr

原则上,有人可以给出(或指向)这些方法的描述吗?

到目前为止,我已经认为AnsiCompareStr在Windows上调用CompareString,这是一种“文本”比较(即考虑到unicode组合字符等).简单的CompareStr没有这样做,似乎做了二进制比较.

但是CompareStr和UStrCmp有什么区别?在UStrCmp和LStrCmp之间?它们都产生相同的结果吗?这些结果是否会在Delphi版本之间发生变化?

我问,因为我需要进行比较,这将始终产生相同的结果,因此使用一个版本的Delphi构建的应用程序中的索引与使用另一个版本构建的代码保持一致.

解决方法

AnsiCompareStr被指定为考虑区域设置,并且无论Delphi版本如何都应返回相同的结果,但可能会根据Windows版本和/或设置返回不同的结果. CompareStr是纯二进制比较:“比较操作基于16每个字符的-bit序数值,不受当前语言环境的影响“(对于CompareStr(const S1,S2:string)重载). UStrCmp也使用纯二进制比较:“根据构成字符串的字符的序数值来比较字符串.”所以后两者之间不应该有区别.它们返回结果的方式是不同的,因此需要两个实现(尽管可以使一个依赖于另一个).

至于LStrCmp和UStrCmp之间的区别,LStrCmp采用AnsiStrings,UStrCmp采用UnicodeStrings.两个字符(假设A和B)完全有可能在错误命名的“ANSI”代码页中被排序为A< B,但以Unicode排序为A> B.您几乎应该始终只使用适合您所拥有数据的比较.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读