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

Anonymous

unregistriert

11

05.01.2006, 11:56

Black-Panther
char benutzt nur 127 Zeichen für die Ausgabe. Bei deutschen Umlauten die erst bei unsigned char im Gültigkeitsbereich liegen ist es schon für Konsolenprogramme sehr problemeatisch!

Warum man es machen sollte? Ganz einfach: ANSI Programme werden seit XP nur noch emuliert, da es echt Steinzeit ist. Das Eurozeichen fehlt und vieles Mehr.

Daher: Unicode

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

12

05.01.2006, 12:17

Richtig, und wenn du irgendwann mal dein Programm in eine andere Sprache portieren willst, gibt es riesige Probleme mit (signed) char. Schon allein Umlaute (wurde das schon erwähnt) sind nicht mal da drin. Erst im unsigned char (256 Zeichen). Nimmt man jetzt aber noch die chinesischen Schriftzeichen hinzu, das sind schon über 10000 ... reicht wohl unsigned char (8Bit) nicht mehr aus, ... also lieber gleich Unicode.

Allles geht sehr einfach mit Unicode. Ich habs auch eingesehen und stell nun endlich auch mal meine Engine um ^^.

@FOX.
Strings sind aus der STL
Also musst du string.h einbinden

einen String erstellst du so:

C-/C++-Quelltext

1
string mystring = "hallo"
. string ist gleichbedeutend mit std::basic_string<char>. wstring ist gleichbedeutend mit std::basic_string<wchar_t>. Also:

C-/C++-Quelltext

1
wstring = L"hallo";


Wenn ich richtig informiert bin, schreibt TEXT einfachfach ein L vor den String...
Aber Patrick hat schon recht, man sollte ja eh makros und defines vermeiden... deshalb tendiere ich auch zu der offiziellen Lösung mit L davor bzw. dem cast von Patrick..

Wenn man aber gleich strings benutzt, was sich eh rentiert, dann reicht auch ein plumper static_cast!

@Patrick:
klar... ^^ Aber die Lösung mit MultiByteToWideChar ist ja die selbe bzw. der Lösungsgedanke :)

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

13

05.01.2006, 13:02

zuder frage warum chars, da war nich ich sondern microsoft, die definieren nämlich in ihrer D3DADAPTERIDENTIFIER struktur description als char[512]
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

14

05.01.2006, 13:10

CW_Kovok
Na ja, ein Betriebssystem unterstützt Unicode, Hardware leider nicht ;) Die unterstützten nur 7Bit Zeichen (128 Zeichen).

koschka
Korrekt, jedoch sollte man std::basic_string<wchar_t> nehmen aus folgenden Gründen:
1. STL ist nicht auf Unicode ausgelegt, daher kann es vorkommen das std::wstring unbekannt ist.
2. Man sieht direkt, dass es sich um wchar_t handelt
3. Sieht voll nach Pr0 aus :D

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

15

05.01.2006, 13:28

das "std::" kann dabei aber wegfallen, oder irre ich mich da?

Kann sein dass das jetzt eine blöde Frage ist, ist aber nicht char schneller als basic_string?? Zumal basic_string eine Template-Klasse ist...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

16

05.01.2006, 13:35

@Blackpanter: Wie viele Zeitkritische Aktionen hast du den mit Strings?
@nix da: wäre es da nich einfacher einfach für wchar_t einen Konstruktor mit char argument anzulegen? Dann wäre es auch immer abwärtskompatibel
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

17

05.01.2006, 13:35

Black-Panther
1. es kann wegfallen, wenn man using namespace std; schreibt. aber dann komm ich wieder und sag Dir kräftigst was anderes ;) Such mal im Forum wieso ich davon nichts halte.

2. char schneller als basic_string? Also wer hier optimiert, dem ist nicht mehr zu helfen. Diese 100.000stel Millisekunde interessiert echt keinen.

3. Templateklassen langsam? Na überleg mal ob die zur Laufzeit noch Templates sind ;)

4. Nix char, sondern wchar_t

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

18

05.01.2006, 13:36

wofür steht noch gleich das L?

Anonymous

unregistriert

19

05.01.2006, 13:37

CW_Kovok
Wozu noch abwärtskompatibel sein? char sollte man nicht mehr benutzen unter Windows, also sollte man es auch sein lassen. Daher ganz oder gar nicht: wchar_t. so halb halb ist doch nichts Ganzes.

Anonymous

unregistriert

20

05.01.2006, 13:37

matthias
Long. Sagt aus das das Zeichen ein Long-Zeichen ist und 2 Byte ist und nicht mehr 1 Byte

Werbeanzeige