gpt4 book ai didi

string - 最新的 Delphi 编译器版本和字符串类型兼容性

转载 作者:行者123 更新时间:2023-12-03 18:59:32 25 4
gpt4 key购买 nike

我正在尝试使一些字符串处理例程与
最新的德尔福版本。我正在使用 Delphi2005 和 2007,但我不完全确定兼容性。

这里有一些示例,它们是否与旧字符串类型和新字符串类型兼容?
(我将使用一个虚构的 STRING_UNICODE 指令)。

  • 类型定义:
    {$IFNDEF UNICODE_STRING}  
    TextBuffer = Array[0..13] Of Char;
    {$ELSE}
    TextBuffer = Array[0..13] Of WideChar;
    {$ENDIF}

    没用还是没用? Char 类型(变成原来的)是 Unicode 字符串之前的 WideChar,还是还有区别?
  • 一个功能:
    Function RemoveBlanks(Text: String): String;  
    Var
    i: integer;
    Begin
    result := '';
    For i:= 0 To Length(Text) Do
    Begin
    {$IFNDEF UNICODE_STRING}
    If Byte(Text[i]) < 21 Then Continue;
    {$ELSE}
    If Word(Text[i]) < 21 Then Continue;
    {$ENDIF}
    If Text[i] = ' ' Then Continue;
    Result := Result + Text[i];
    End;

    Word() 转换是否正常?

    这里还有' '问题。空间如何处理
    在 Unicode 版本中?我是否也应该使用该指令来
    区分 ' '' '或将' '被自动处理
    作为 2 字节的空白?
  • 跳线:
    NewLineBegin := CanReadText( aPTextBuffer, #13#10 );

    第二个参数 (#13#10) 在 Unicode 版本中是如何解释的?它兼容吗?会不会被翻译成字节 block 00130010 ?如果不是,那么该指令是否应该与常量 #0013#0010 一起使用?
  • 最佳答案

    首先要做的是阅读 Marco Cantú 的论文
    统一码:http://edn.embarcadero.com/article/38980

    问题 1

    只需一直使用 Char 而不使用条件代码,它就可以在新旧版本中使用。

    Char 是一种特殊类型,在旧版本的 Delphi 中是 8 位类型,在新的 Unicode 版本中是 16 位类型。

    问题2

    Char 是一个序数类型,所以你可以写 if s[i]<#21 .

    对于字符串,您还需要从 1 开始循环,因为它们使用基于 1 的索引。

    问题 3

    不需要写#0013,#13 就可以了。

    简而言之,几乎所有编写良好的代码都不需要更改。

    关于string - 最新的 Delphi 编译器版本和字符串类型兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5736792/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com