Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ IntToStr zu WCHAR (https://www.delphipraxis.net/193475-inttostr-zu-wchar.html)

EWeiss 4. Aug 2017 08:45


IntToStr zu WCHAR
 
Kann mir jemand helfen weis nicht wie ich das in C++ rüber bringen soll.

Delphi-Quellcode:
intToStr(Second div 60) + 'Min ' + intToStr(Second mod 60) + 'Sec';


Der Wert soll an WCHAR (Unicode) übergeben werden.
Danach will ich den Text mit SetWindowText an meinen Label schicken.

Das ist soweit klar
Code:
(Second / 60) + L"Min " + (Second %= 60) + L"Sec";

gruss

Fritzew 4. Aug 2017 09:56

AW: IntToStr zu WCHAR
 
Hallo Emil

tue Dir selbst einen gefallen und beschäftige Dich etwas mit
std::wstring und Co

Wenn es um Stringhandling geht ist C++ etwas ganz anderes als Delphi.

Es lohnt sich die Std Lib zumindest etwas zu kennen.

Gruss

EWeiss 4. Aug 2017 20:16

AW: IntToStr zu WCHAR
 
sorry doppelt kann gelöscht werden.

gruss

EWeiss 4. Aug 2017 20:20

AW: IntToStr zu WCHAR
 
Zitat:

Zitat von Fritzew (Beitrag 1378054)
Hallo Emil

tue Dir selbst einen gefallen und beschäftige Dich etwas mit
std::wstring und Co

Wenn es um Stringhandling geht ist C++ etwas ganz anderes als Delphi.

Es lohnt sich die Std Lib zumindest etwas zu kennen.

Gruss

Da magst recht haben hilft mir aber nicht bei meinem aktuellen Problem.
Das ist ein Projekt in C++ das ich nur einmal erstelle dann wende ich mich wieder Delphi zu.
C++ ist komplett anders als Delphi :)

Warum muss ich jetzt das Komplette MSVC in 3 stunden erlernen wegen 1 Funktion (Frage) wenn mir dabei jemand helfen könnte.


gruss

Zacherl 4. Aug 2017 21:41

AW: IntToStr zu WCHAR
 
Sofern du keinen älteren Standard als C++11 unterstützen willst, kannst du dafür
Delphi-Quellcode:
std::string s = std::to_string(42);
verwenden. Die
Delphi-Quellcode:
std::string
Klasse kann auch appenden und sollte den + Operator überladen haben, sodass du die Stringkonkatenation genau wie in Delphi hierrüber handhaben kannst.

EWeiss 4. Aug 2017 21:44

AW: IntToStr zu WCHAR
 
Zitat:

Zitat von Zacherl (Beitrag 1378111)
Sofern du keinen älteren Standard als C++11 unterstützen willst, kannst du dafür
Delphi-Quellcode:
std::string s = std::to_string(42);
verwenden. Die
Delphi-Quellcode:
std::string
Klasse kann auch appenden und sollte den + Operator überladen haben, sodass du die Stringkonkatenation genau wie in Delphi hierrüber handhaben kannst.

Ich komme mit der Formatierung nicht zurecht ;)
Der Ausgangsstring ist WCHAR nicht string. :)

gibt es das?
Code:
std::to_string(42).wchar_t;
gruss

Zacherl 4. Aug 2017 21:49

AW: IntToStr zu WCHAR
 
Ja analog zu
Delphi-Quellcode:
std::string
gibt es auch
Delphi-Quellcode:
std::wstring
:P

Edit:
Und
Delphi-Quellcode:
std::to_wstring

EWeiss 4. Aug 2017 21:55

AW: IntToStr zu WCHAR
 
Zitat:

Zitat von Zacherl (Beitrag 1378113)
Ja analog zu
Delphi-Quellcode:
std::string
gibt es auch
Delphi-Quellcode:
std::wstring
:P

Edit:
Und
Delphi-Quellcode:
std::to_wstring

Code:
WCHAR StreamLenght = std::to_wstring(Second / 60) + L"Min " + std::to_wstring(Second %= 60) + L"Sec";
Zitat:

Fehler (aktiv) E0413 Es ist keine passende Konvertierungsfunktion von ""std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>"" in ""WCHAR"" vorhanden.
Zitat:

Fehler C2440 "Initialisierung": "std::basic_string<wchar_t,std::char_traits<wchar_ t>,std::allocator<wchar_t>>" kann nicht in "WCHAR" konvertiert werden
gruss

EWeiss 4. Aug 2017 23:13

AW: IntToStr zu WCHAR
 
So macht man aus einer Zeile 11

Delphi-Quellcode:
        INT64 Second = (aMediaProperty.PlaybackLength / 10000) / 1000;
       
        WCHAR Minutes[MAX_PATH];
        WCHAR Seconds[MAX_PATH];
        WCHAR StreamLenght[MAX_PATH];
        // Minuten
        std::wstring Min_tmp = std::to_wstring(Second / 60);
        WCHAR * Min = &Min_tmp[0];
        Str_Combine(Minutes, Min, L" Min ");
        // Sekunden
        std::wstring Sec_tmp = std::to_wstring(Second %= 60);
        WCHAR * Sec = &Sec_tmp[0];
        Str_Combine(Seconds, Sec, L" Sec");
        // Kombinieren
        Str_Combine(StreamLenght, Minutes, Seconds);
        // Ausgabe
        SetWindowText(hLblStreamLenght, StreamLenght);
Was für ein Schmarrn. Eine andere Lösung fällt mir nicht ein.
Wenn ich das jetzt hiermit auch noch machen muss dann habe ich 50 Zeilen anstelle von 3

Delphi-Quellcode:
        //lbl_VideoInfo.Caption : = FormatFloat('#,##0', aMediaProperty.Video_Width) + ' x ' +
        //    FormatFloat('#,##0', aMediaProperty.Video_Height) + ', ' +
        //    FormatFloat('##0.00', aMediaProperty.Video_FPS) + ' FPS';
        //SetWindowText(hlblVideoInfo, VideoInfo);
        //lbl_AudioProperty.Caption : = intToStr(aMediaProperty.Audio_Channels) + ' Channel, ' +
        //    FormatFloat('#,##0', aMediaProperty.Audio_Samplerate) + ' SPS, ' +
        //    intToStr(aMediaProperty.Audio_BitsPerSample) + ' BPS';
        //SetWindowText(hlblAudioProperty, AudioProperty);
gruss

Zacherl 5. Aug 2017 00:57

AW: IntToStr zu WCHAR
 
Dein Fehler kommt daher, dass du deine Variable als
Delphi-Quellcode:
WCHAR
(einzelnes Zeichen = WideChar) deklarierst und nicht als
Delphi-Quellcode:
WCHAR*
(PWideChar).


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz