![]() |
Delphi-Version: XE
W 1057 Implizite String-Umwandlung Ansistring zu string
Hallo,
ich stelle gerade ein Projekt von D5 auf XE um. Im rs232 Bereich muss ich hier mit Ansi-Strings arbeiten.
Delphi-Quellcode:
Hextobyte braucht einen Stringparameter, also kommt die o.g. Warnung.
s : Ansistring;
s := '12'; d := HexToByte(s); Da es an dieser Stelle ungefährlich ist (?) kann ich statt Hextobyte(string(s)) auch die Warnung abschalten oder habe ich dann einen Nebeneffekt? Und wo zum Teufel finde ich in der Hilfe eine Zusammenstellung der Compilerschalter um diese Warnung abzuschalten? Gruß Peter |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Hallo Peter,
ich kenne die Funktion
Delphi-Quellcode:
nicht. Gibt es hierfür vielleicht eine alternative? Wie ist
HexToByte
Delphi-Quellcode:
deklariert?
d
Delphi-Quellcode:
Gruß, Chris
{$WARNINGS OFF}
//hier kommt keine Warnung mehr {$WARNINGS ON} |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Versuch es mal mit einem expliziten Typecast auf String:
Delphi-Quellcode:
d := HexToByte(string(s));
|
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Entweder du nutzt ein HexToByte, welches AnsiStrings als Parameter nutzt,
du castest es manuell
Delphi-Quellcode:
(genaueres können wir nicht sagen, da uns die Definition von HexToByte vorenthalten wurde)
d := AnsiString(HexToByte(String(s)));
oder eben einfach ignorieren. In diesem Fall wird ja so oder zo umgewandelt, entweder automatisch durch Delphi (wobei dieses eine Warnung ausgibt) oder man castes es manuell, ohne eine Warnung zu erhalten. Solange nur ASCII-Zeichen (#0..#127) im String sind, gibt es absolut keine Probleme, bei ANSI (#0..#255) sollte es hier auch nahezu problemlos laufen, da es ja nach Unicode und gleich wieder zurück umgewandelt wird. |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Habt Ihr meine Frage eigentlich bis zum Ende gelesen?
Wie ein Typecast funktioniert habe ich bereits beschrieben. Und für Hextobyte kann man eine beliebige andere Funktion mit einem String-Parameter verwenden. Meine Frage ist ob ein Typecast string(s) an vielen Stellen im Programm erfolgen sollte oder ob ein explizites Ausschalten dieser Warnung ausreichend ist, da ein impliziter Typecast an dieser Stelle keine Nebenwirkung haben sollte. $Warn on/of ist nicht die Lösung. Ich suche in der Hilfe den Schalter um nur die Warnung W1057 ausschalten zu können. Gruß Peter |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Da du trotz Nachfrage die Deklaration von d und HexToByte nicht offenlegst, ist alles nur hellsehen wegen der Nebeneffekte...
In den Projektoptionen gibts mehrere Schalter "Implizite/Explizite String-Umwandlung (mit potentiellen Datenverlusten)" unter den Compilereinstellungen für Warnungen wegen der Stringcasts. |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Hallo Peter,
Zitat:
Zitat:
damit: Zitat:
Zitat:
Gruß, Chris |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Vielen Dank für die tatkräftige und konstruktive Unterstützung.
Ich bin zwischenzeitlich fündig geworden. Was ich gesucht habe ist die Compilerdirective {$WARN EXPLICIT_STRING_CAST OFF} Was in XE noch funktioniert strg + O + O , dann werden die eingestellten Direktiven in den Quellcode übernommen und man kommt so an undokumentierte Schalter ran. Und nein bei deinem impliziten Typcast von Ansistring auf string kommt es nicht zu Problemen, da Unicode und Ascii Code in den ersten 128 oder 255 Byte gleich ist. Peter |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Zitat:
die letzen 128 Zeichen (#128..#255) werden je nach ensprechender Codepage umkodiert. |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
OT:
Zitat:
Man, dass kannte ich noch gar nicht. THX - wieder was dazu gelernt :-) Gruß, Chris |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Schlimm ist, es gibt noch andere Strg+O+...-Kombinationen.
Wer läßt ich sowas denn einfallen? :wall: |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Zitat:
Gruß, Chris |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
eine Vollständige hatte ich noch nicht gesehn, genauso wie es nirgendwo eine
vollständige Liste aller Compilerschalter gibt. ![]() |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Umwandlung - Ansistring in String;
Zitat:
Function ansistring(value: string): ansistring; Performancemässig bin ich mit dieder Function nicht zufrieden. Kann mir die evtl. einer in assembler umschreiben? zu Info die function string(value: ansistring): String liefert nicht das gleiche Ergebnis |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Delphi-Quellcode:
Und
// explizite Umwandlung
function asString(value: AnsiString): String; begin Result := String(value); end; // implizite Umwandlung function asString(value: AnsiString): String; begin Result := value; end;
Delphi-Quellcode:
isr keine Funktion, sondern ein Type-Cast (Typumwandlung).
string
Und natürlich liefert sie nicht unbedingt das gleiche Ergebnis, da sie die Codierung des AnsiString berücksichtig. ![]() PS: Die obrigen Type-Casts nutzen dieses auch, nur eben mit CP_ACP als Codepage. |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
Hallo himitsu,
vielen Dank für den Hinweis, ich hab es es jetzt folgendermaßen gelöst.:-D
Code:
function asString(value: Ansistring): String;
var len : integer; begin len:=length(value); SetLength(Result, len ); if len > 0 then MultiByteToWideChar(Cp_ACP, MB_PRECOMPOSED, PansiChar(@value[1]), len , PWideChar(@Result[1]), len); end; |
AW: W 1057 Implizite String-Umwandlung Ansistring zu string
man kann's auch noch etwas kürzen
Delphi-Quellcode:
PAnsiChar(value), len , PWideChar(Result), len);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz