Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

1

05.01.2006, 02:06

wchar_t gibbet eleganteren weg?

Moin,

ich stelle gerade meine config auf wchar_t um, nur muss ich da manchmal chars in wchars umwandeln, mache ich imo so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
std::basic_string<wchar_t> core::GetWideString(const char* pcText)
{
    std::basic_stringstream<wchar_t> s; 

    s<<pcText;

    return s.str(); 
}


ist das so ok, oder gibt es da eine bessere alternative?
Was es alles gibt, das ich nich brauche - Aristoteles

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

05.01.2006, 08:14

nimm doch nicht char*, sondern basic_string<char> und wandle es durch cast in basic_string<wchar_t> (wstring) um

---- ungefäähr so

C-/C++-Quelltext

1
2
3
4
std::basic_string<char> String = "hi";
std::basic_string<wchar_t> WString;

WString = static_cast<std::basic_string<wchar_t> >(String);


Es geht so.... Ich weiss nur ned ob das jetzt soo stimmt ^^
Als unsaubereren Weg kannst du auch das TEXT(...) Makro nehmen.

C-/C++-Quelltext

1
WString = Text("hi");


besser ist aber:

C-/C++-Quelltext

1
WString = L"hi";


übrigends sind string für std::basic_string<char> und wstring für std::basic_string<wchar_t> Synonyme.

Du siehst nen eigenen Cast Operator braucht man eigentlich nicht...

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

3

05.01.2006, 08:41

werds mal probieren, denn das problem ist, in der D3DADAPTER_IDENTIFIER struktur ist die description als char[512] definiert und dass hier:

C-/C++-Quelltext

1
std::basic_string<wchar_t> description = Ident/*Variable der Struktur*/.description;

funktioniert leider nicht, wieso haben wstrings keinen Konstruktor für char?
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

4

05.01.2006, 09:29

Nach dem gradiosen lexical_cast, jetzt der uni_cast! Take it!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <string>
#include <windows.h>

template<typename A, typename T> inline ::std::basic_string<A> uni_cast (const T* source) 
{ 
    std::cout << "uni_cast <T, T>" << std::endl;

    return (source);
} 

template<> inline ::std::basic_string<char> uni_cast (const wchar_t* source) 
{ 
    std::cout << "uni_cast <char, wchar_t>" << std::endl;

    char *buffer = new char[::wcslen (source)*2];

    ::WideCharToMultiByte (CP_ACP, 0, source, -1, buffer, static_cast<int>(::wcslen (source)*2), NULL, NULL); 
 
    std::basic_string<char> result (buffer);

    delete [] buffer;

    return (result);
} 

template<> inline ::std::basic_string<wchar_t> uni_cast (const char* source) 
{ 
    std::cout << "uni_cast <wchar_t, char>" << std::endl;
    wchar_t *buffer = new wchar_t[::strlen (source)];

    ::MultiByteToWideChar (CP_ACP, 0, source, -1, buffer, static_cast<int>(::strlen (source))); 
 
    std::basic_string<wchar_t> result (buffer);

    delete [] buffer;

    return (result);
}

int main (void)
{
    std::basic_string<wchar_t>  test    = uni_cast<wchar_t>("Hallo!");  // ANSI zu Unicode

    std::basic_string<char>     test2   = uni_cast<char>(L"Hallo!");    // Unicode zu ANSI

    std::basic_string<char>     test3   = uni_cast<char>("Hallo!");     // ANSI zu ANSI

    std::basic_string<wchar_t>  test4   = uni_cast<wchar_t>(L"Hallo!"); // Unicode zu Unicode


    std::wcout << test << std::endl;
    std::cout << test2 << std::endl;
    std::cout << test3 << std::endl;
    std::wcout << test4 << std::endl;

    std::cin.get();
    return 0;
}

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

5

05.01.2006, 09:47

werde ich direkt mal ausprobieren :)
danke
Was es alles gibt, das ich nich brauche - Aristoteles

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

05.01.2006, 11:21

@Kovok,
wieso benutzt du den noch char*? benutz Strings, dann hast du damit gar keine Probleme...

Wenn du das nich willst nutz TEXT, ist allerdings in der Windowsheader (glaub ich) ^^.
dafür brauchst du nur char*, oder ie templates von patrick.... im Übrigen ist bei fast jedem eine Funktion DXUtil_ConvertAnsiToWide oder so mit dabei... ist aber im groben das gleiche was Patrick gepostet hat.

Anonymous

unregistriert

7

05.01.2006, 11:23

koschka
Aber extrem grob.

8

05.01.2006, 11:34

Zwei Fragen:

1. Wie heißt der Datentyp für Strings?
2. Was macht das TEXT-Makro? Wandelt es ANSI in UNICODE um?

So: ???

C-/C++-Quelltext

1
wchar_t toll = TEXT("Toll!");


und auch so: ???

C-/C++-Quelltext

1
2
3
4
5
char toll[256];
strcpy(toll, "Dies ist ein Test.");

wchar_t tollw = TEXT(toll);
MessageBoxW(NULL, tollw, "Toller Titel:", MB_OK);


Geht das so? Hab nämlich keine Ahnung von diesem Makrom sorry...

F0GX

Anonymous

unregistriert

9

05.01.2006, 11:44

FOGX
Lass den Quatsch mit TEXT und TCHAR sein. Das war nur ne Erfindung von der Übergangszeit von Win3.11 auf WinNT.

Benutz wchar_t und L vor jedem String und Du hast Deine Ruhe. TEXT braucht man in Unicodeprogrammen nun wirklich nicht mehr, da char nicht mehr benutzt werden sollte.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

10

05.01.2006, 11:53

wieso sollte man nur noch UNICODE verwenden?? Bisher ist man mit den 256 Zeichen auch ausgekommen... wieso jetzt nicht mehr?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige