Aktuelle Zeit: 12.05.2024, 15:09

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: char* nach wchar_t* konvertieren
BeitragVerfasst: 26.10.2008, 13:35 
Offline

Registriert: 07.10.2008, 17:41
Beiträge: 23
Mein problem ist, dass ja XML-Daten in char* gespeichert werden, aber bei GUI immer wchar_t benutzt wird. :(

Kann man das umgehen?
Bzw. wie bekommt man das einfach konvertiert?
Auf der klassischen Variante geht das wegen den unterschiedlichen Größen nicht:(


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 26.10.2008, 14:21 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Code:
char* c;
wchar_t* w;

w = stringw( c ).c_str();

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 26.10.2008, 19:30 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Hallo

Zitat:
Mein problem ist, dass ja XML-Daten in char* gespeichert werden
Die Daten werden nicht in "char *" gespeichert (?) "char *" ist einfach nur ein Pointer auf eine Stelle ich Speicher an der eine bestimmte Zeichenfolge steht. Und eigentlich kann es dir doch egal sein, wie die Daten gespeichert werden, es wäre besser zu wissen, wie und als was sie eingelesen werden.
Zitat:
Kann man das umgehen?
Du könntest die Irrlicht-Engine umschreiben und neu kompilieren. Aber es geht auch ohne zu "umgehen".

stringc und stringw sind dem Verhalten von std::string sehr ähnlich und sind so etwas wie ...hmm... verwaltete Speicherklassen... Nein Klassen stimmt nicht, oder? Egal, auf jeden Fall solltest du mit string(c/w) arbeiten.

stringc <- passt Text rein
stringw <- hier auch

Code:
stringw a;
stringc b = "b";
a = b.c_str();


stringc.c_str() -> const char *
stringw.c_str() -> const wchar_t *

Solltest du also Daten durch den XMLReader einlesen, würde ich diese in ein string(c/w) (je nach Gebrauch) einlesen und später mit .c_str() ausgeben.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 29.10.2008, 18:42 
Offline

Registriert: 07.10.2008, 17:41
Beiträge: 23
Roman hat geschrieben:
stringc <- passt Text rein
stringw <- hier auch

Code:
stringw a;
stringc b = "b";
a = b.c_str();



Bis hier bin ich mitgekommen

Zitat:
stringc.c_str() -> const char *
stringw.c_str() -> const wchar_t *

Solltest du also Daten durch den XMLReader einlesen, würde ich diese in ein string(c/w) (je nach Gebrauch) einlesen und später mit .c_str() ausgeben.


Das verstehe ich nicht ganz: Also, dass mit dem XML Reader verstehe ich auch noch. Aber mit der Ausgabe komme nicht ganz mit. Also ich möchte den Typen const wchar_t bekommen, aber wie bekomme ich "a" in den Datentypen konvertiert?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 29.10.2008, 19:00 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
mit der c_str() methode

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 30.10.2008, 12:32 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Hallo

Zitat:
Also ich möchte den Typen const wchar_t bekommen, aber wie bekomme ich "a" in den Datentypen konvertiert?

Zitat:
mit der c_str() methode

c_str() beim stringw (bessere/schnellere Idee habe ich wirklich nicht)
Jedoch als reinen wchar_t-Datentyp geht das soweit ich weiß mit stringw nicht. Wozu denn auch? Alles nötige besitzen die Irrlicht typedefs, templates und mehr.

Praktisches Beispiel: (so ist es bei mir wirklich)
Ich habe Sprachpakete für mein Spiel, im XML-Format. Wie XML geschrieben, gelesen wird wissen wir alle.
Die GUI-Texte, Titelleiste, etc. benutzen alle wchar_t. Als Parameter const wchar_t *. Also ein Zeiger in den Speicherbereich, wo ein bestimmter String vom Datentyp wchar_t (wenn das überhaupt ein reiner Datentyp ist ??) steht, bzw. erstellt wird. Er wird als const gekennzeichnet, der Inhalt darf nicht verändert werden. bla bla. :D Einfach mal den lieben, netten Informatiklehrer fragen. 8)
Nun ich verwende eine array mit stringw's und noch anderen Parametern. Die XML-Datei wird gelesen, die Sprachtexte werden in diese array eingesetzt, in stringw. Erstelle ich einen IGUIStaticText oder ähnliches, greife ich auf meine array zu und übergebe den dazugehörigen Text als stringw.c_str() als Parameter.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 30.10.2008, 15:26 
Offline

Registriert: 07.10.2008, 17:41
Beiträge: 23
Danke 8) super, klappt super. Aber jetzt noch eine kurze Frage zu IrrXml.

Code:
<LeaderInfo path = "ICaesarInfo.xml" >CAESAR</LeaderInfo>


Wie greife ich auf "CAESAR" zu? Ich dachte, dass würde mit "getNodeData" funktionieren, aber dann zeigt der mir LeaderInfo an( genauso wie getNodeName)
:(


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 30.10.2008, 15:54 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Ich kenn mich zwar mit IrrXml nicht so aus, aber bei den meisten XML Parsern die ich kenne wäre CESAR ein TextNode. Also ein Child von LeaderInfo.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 30.10.2008, 17:05 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Hallo nochmal!

Zitat:
<LeaderInfo path = "ICaesarInfo.xml" >CAESAR</LeaderInfo>
Hmm, ich würde die beiden Leerzeichen vor und nach dem Istgleich beim XML allgemein weglassen und mich unter Verwendung von Irrlicht/Irrxml an die Schreibweise des IXMLWriter richten.

Asonsten studiere das Beispiel auf dieser Seite: (Darin findest du die Antwort auf deine Frage)
http://www.ambiera.com/irrxml/

Kann dir natürlich auch Teile des XML-Reader-Codes aus meinem Projekt posten.


Nach oben
 Profil  
 
 Betreff des Beitrags: stringw
BeitragVerfasst: 13.01.2009, 18:17 
Offline

Registriert: 07.10.2008, 17:41
Beiträge: 23
Ich habe noch mal eine Frage zu IrrXML.

Ich möchte nämlich Umlaute einlesen.
Kann es sein, dass stringw gar keine Umlaute lesen kann. Weil der UTF16-Reader sollte doch eigentlich Umlaute lesen können.

Ich habe die Daten vorher mal mit const wchar_t gespeichert, da aber spuckte der mir irgendeinen Scheiß aus, was gar nicht stand.

Wie soll ich am besten die Daten speichern (also von IXMLReader::getNodeData())


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 13.01.2009, 18:45 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Wenn du die xml datei, aus der du liest von Hand erstellt hast, musst du sie als UTF-16 speichern, damit sie auch fehlerfrei als UTF-16 gelesen werden kann.

Wie das geht kommt auf den Texteditor an, mit dem du die Datei erstellt hast. Für notepad++ wäre das zum Beispiel im Menü "Format", für notepad bei datei speichern unter einfach die Codierung ändern.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: char* nach wchar_t* konvertieren
BeitragVerfasst: 14.01.2009, 10:41 
Offline

Registriert: 07.10.2008, 17:41
Beiträge: 23
da wäre ich nie darauf gekommen. Ich habe bei Notepad zwar nicht UTF8, aber ANSI gehabt. In UTF8 ging es natürlich nicht, aber UCS funktioniert.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de