stringlist的排序是按照单字节还是按照双字节排的?
比如两个字符串:
'ab '和'ab'一个后边是空格,一个后边是,十六进制分别为20和01。
排序的结果为:
ab
ab (后有空格)'ab '和'aba',十六进制分别为61 62 20和61 62 01 61
排序的结果为:
ab (后有空格)
aba谁解释一下原因?在excel中也是如此。

解决方案 »

  1.   

    按我的理解:'ab' 'ab ' 'ab '三个串排序的的顺序应该为:
    'ab'
    'ab '
    'ab '
    但实际上是:
    'ab'
    'ab '
    'ab '的十六进制ANSI编码为01,最小的。
    哪位高手解释一下?顺便说一下,我想找一个可以排到空格之前的字符,发现只要能够显示出来的,都会排到空格之后(前提是前后都有字符,前面的相同,如果单排这两个字符,就会按ANSI编码排列),才发现这个现象,不能明白。
      

  2.   

    跟踪到后台,
    比较函数是采用的WINNT的函数CompareStringA
    function CompareString; external kernel32 name 'CompareStringA';于是,要怪就怪微软吧。
      

  3.   

    调用
    AnsiCompareText('ab c','ab'#$01'c')
    返回-1AnsiCompareText的实现:
    function AnsiCompareText(const S1, S2: string): Integer;
    begin
      Result := CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, PChar(S1),
        Length(S1), PChar(S2), Length(S2)) - 2;
    end;