/ / Ako previesť AnsiString na celé číslo v modernej Delphi? - reťazec, Delphi, Unicode, prevod typu

Ako previesť AnsiString na celé číslo v modernom Delphi? - reťazec, delphi, unicode, typová konverzia

Toto je trochu odlišné od SameText otázka.

Potrebujem konvertovať AnsiString do Integer.

var
param: AnsiString;
num: Integer;
begin
if TryStrToInt(param, num) then
...

V pred Unicode Delphi by som použil TryStrToInt fungujú, ale v modernej Delphi existuje iba jeho verzia Unicode, takže dostávam toto upozornenie: W1057 Implicitné reťazce prenášané z „AnsiString“ na „reťazec“ pri volaní.

Moja otázka je, ako správne previesť AnsiStrings v moderných Delphi bez toho, aby sa zobrazovali varovania kompilátora (a bez zbytočného odovzdávania reťazcov do UnicodeString (text))

odpovede:

7 pre odpoveď č. 1

K dispozícii máte rôzne možnosti:

  1. Prijímajte a prijímajte Unicode. Prestaňte používať AnsiString.
  2. Použite výslovný prevod do string: TryStrToInt(string(param), num).
  3. Vypnite varovanie W1057.
  4. Vykonajte konverziu z ANSI na UTF-16 sami volaním na MultiByteToWideChar, Toto nie je vážna možnosť, ale ak chcete ponechať W1057 povolenú a nepoužiť explicitnú konverziu, zostane to.

Úprimne povedané, uprednostňuje sa možnosť 1. Ak sa pokúsite vytrvať v používaní AnsiString prostredníctvom svojho kódu budete wallowing vnekonečné množstvo obáv a varovaní. Ak potrebujete reťazce kódované ANSI, pravdepodobne bude na hranici interopu. Možno čítate alebo zapisujete súbory, ktoré používajú kódovanie ANSI. Vykonajte prevod medzi ANSI a UTF-16 na hranici interop. Zvyšok času na použitie interného kódu string.


0 pre odpoveď č. 2

ako správne previesť AnsiStrings v modernej Delphi bez toho, aby sa dostal varovania kompilátora (a bez toho, aby sa zbytočne museli prenášať reťazce na UnicodeString

Ak neodovzdávate z AnsiString do String, kompilátor to urobí za vás. Je to len záležitosť, ak to výslovne urobíte, alebo to kompilátor implicitne urobí za vás.

Ak explicitne vykonáte konverziu v kóde (prostredníctvom obsadenia), kompilátor sa nemusí báť vedľajších účinkov. Predpokladá sa, že viete, čo robíte, a necháva vás tak.

Musíte si vybrať jeden. Varovanie kompilátora alebo explicitné odovzdávanie.

Tieto varovania kompilátora by ste mohli technicky vypnúť (ale nerobte to):

W1057 IMPLICIT_STRING_CAST ON Implicitný reťazec prenášaný z '% s' na '% S' (Delphi)

W1058 IMPLICIT_STRING_CAST_LOSS ON Implicitné zadávanie reťazcov pomocou potenciálna strata údajov z „% s“ na „% s“ (Delphi)