Delphi XE2 AnsiFormat()和ANSI String常量

Bri*_*awk 5 delphi string ansistring widestring delphi-xe2

是否有一个方便的Format()函数只适用于Ansi字符串?因为每次我使用带有Format()的AnsiString时都会收到警告.不,我不希望Delphi在Wide和Ansi字符串之间来回转换我的AnsiStrings.这只是让事情变得非常慢.另外,有没有办法强制字符串常量为Ansi?看一下这个

function SomeStrFunc(S: AnsiString): AnsiString; overload;
function SomeStrFunc(S: String): String; overload;
Run Code Online (Sandbox Code Playgroud)

然后当我使用SomeStrFunc('ABC')时,它将调用宽字符串版本.如果我想使用Ansi版本并强制Delphi在AnsiChars中存储'ABC'常量怎么办?

klu*_*udg 11

还有就是ANSI版本Format功能System.AnsiStrings单元


Rem*_*eau 7

Serg回答了你关于某个AnsiString版本的问题Format().我会回答你的另一个问题.

字符串文字根据它们使用的上下文进行编码,因此要将文字强制为特定编码,您必须告诉编译器需要使用哪种编码,例如:

SomeStrFunc(AnsiString('ABC'));
Run Code Online (Sandbox Code Playgroud)

要么

const
  cABC: AnsiString = 'ABC';

SomeStrFunc(cABC);
Run Code Online (Sandbox Code Playgroud)

  • 除非将其分配给不同字符串类型的变量,否则不需要告诉编译器如何存储文字.如果为字符串和AnsiString变量分配相同的文字,编译器将在exe中存储两个版本.我相信这一点(http://stackoverflow.com/questions/4292611/is-there-some-advantage-in-use-resourcestring-instead-of-a-const-string/4293415#4293415).不确定编译器是否具有将文字值传递给string/AnsiString参数的相同行为. (3认同)