einzeln auf Highbyte und Lowbyte eines wide char zugreifen

sand13r

Erfahrenes Mitglied
Halli Hallo,

ich möchte einen char string in einen Widechar string konvertieren.
Zueerst hab ich es mit der Fkt mbstowcs() versucht was bei mir auch wunderbar funktionierte nur leider auf dem Testrechner dann vom tester wirft die gute Funktion wohl einen Fehler was darin endet dass das Programm mit einem "Das Programm hat einen Fehler verursacht..." abstürzt.
Weis da einer wieso ?


Ich wollte jetzt mir selber so eine Funktion basteln und hatte eigentlich gehofft das des net alzu schwer sein dürfte. aber so kann man sich irren ^^

meine Idee war zuerst einen char String zu machen und da jedes Zeichen einzeln reinschreiben wobei an 2ter Stelle nach jedem Zeichen immer eine 0 kommt und das dann auf ein widechar kopieren.. hat leider nicht funktioniert da die 0 ja das stringendekennzeichen ist ^^


Jetzt wollte ich fragen ob jemand einen guten Weg wüsste wie man sowas anstellen könnte oder eben wie man bei einem wide char einzeln auf das Highbyte und das Lowbyte schreibt dann könnt ichs ja wieder mit ner for()-Schleife machen.


wäre wirklich um jeden Tipp oder Denkanstoss dankbar


greetz sand13r
 
Zueerst hab ich es mit der Fkt mbstowcs() versucht was bei mir auch wunderbar funktionierte nur leider auf dem Testrechner dann vom tester wirft die gute Funktion wohl einen Fehler was darin endet dass das Programm mit einem "Das Programm hat einen Fehler verursacht..." abstürzt.
Weis da einer wieso ?
Wird wohl ein Zeigerproblem sein; möglicherweise ist der reservierte Speicher für den Ergebnisstring zu klein.

Ich wollte jetzt mir selber so eine Funktion basteln
Wenn du es denn partout selber machen willst:
C++:
char in[] = "abc";
    
int     nLen  = strlen(in);
wchar_t *pout = new wchar_t[nLen + 1];

for( int i = 0; i < nLen; i++ )
{
    pout[i] = static_cast<wchar_t>(in[i]);
}
    
pout[nLen] = L'\0';

// pout für irgendwas verwenden
    
delete pout;
Gruß
MCoder
 
Hallo Mcoder,


Vielen Dank für deinen Tipp mit dem Zeigerproblem werd mir das mal anschauen, woran kann das liegen das es bei mir geht und auf anderen Rechnern nicht?
Bzw was wäre eine Lösung dafür. Eigentlich hab ich alle Arrays ziemlich groß gemacht.. dacht ich mal^^

Eh super vielen dank für deinen codeabschnitt werd ihn mir sofor zu Gemüte ziehen.

Ich habe von einem Arbeitskollegen noch eine andere Lösung bekommen womit es auch ging

Code:
wchar_t theChar[500];
char *pBytePtr = (char*) & theChar;

int len=_mbslen(pcharin);

int y=0;
for(int i =0;i<len;i++)
{
	pBytePtr[y]=pcharin[i];
	pBytePtr[y+1]=0;
	y+= 2;
}
pBytePtr[y]=0;
pBytePtr[y+1]=0;


Ok Vielen Dank nochmal an dich. Leider stürzt das Programm immernoch ab.. aber anscheinend jetzt an ner anderen Stelle :(

MCoder 4 President


greetz sand13r
 
Bzw was wäre eine Lösung dafür. Eigentlich hab ich alle Arrays ziemlich groß gemacht.. dacht ich mal^^
Das Array solltest du dynamisch entsprechend dem tatsächlich benötigtem Speichplatz anlegen, so wie ich es auch in meinen Code gemacht habe.

Leider stürzt das Programm immernoch ab.. aber anscheinend jetzt an ner anderen Stelle
Bist du dir eigentlich sicher, dass der Absturz davor mit der Konvertierung zu tun hatte?

Gruß
MCoder
 
Hi MCoder ^^

Wir haben mit einem Crashfinder die Adresse die beim Absturz angeziegt wurde hergenommen und da hat er auf die Funktion verwiesen.. jetzt wo i se ersetzt hab stürtzt er bei __woutput_l() ab. Ist anscheinend ne Hilfsfunktion der Runtime :( hab aber keine Ahnung wie ich den Fehler beheben soll... i glaub langsamm das bei dem irgendeine Datei oder dll Fehlt.. weil ich en neues sdk installiert hab und so,
meinst des könnte damit zusammenhängen ?

Vielen Dank nochmals für deine Hilfe^^


greetz sand13r
 
Hmm, fehlende Laufzeitkomponenten (DLLs) sollten eigentlich gleich beim Programmstart auffallen. Was für ein Projekt ist es denn, mit MFC oder nur Win32? Hast du es auch noch auf weiteren Rechnern ausprobiert?

Gruß
MCoder
 
Guten Morgen,


Also es ist ein MFC Projekt und MFC wird in ner Static Library genutzt.
Ich hatte jetzt den Verdacht das ich das falsche SDK installiert hab XD
Hab das SDK for Windows Server 2008 and #NET Framework installiert und gerade plötzlich gedacht Moment mal da steht ja gar nix von XP^^ aber laut meines Arbeitskollegen müsste das schon das richtige sein. Mist wäre auch zu schön gewesen :(
Ich versteh halt net wieso es bei mir geht :( aber is wohl immer so.. bei einem gehts und der wos testen soll findet dann 1000 Fehler XD. Ich schau mir jetzt mal nochmal die Funktion __woutput_l() an und hoffe das ich irgendwas finde :(
Danke nochmals für deine Hilfe und deine Tipps.


greetz sand13r
 
Hallo,

also bei einer Static Library sollte es eigentlich überhaupt keine weiteren Laufzeitkompomponenten brauchen und das .NET-Framework wird bei MFC auch nicht benötigt. Hast du das Ganze auch als Release kompiliert?
__woutput_l() kommt irgendwo aus den Tiefen der C/C++-Standardlibs. Die Absturzursache liegt daher auf jeden Fall woanders. Vielleicht solltest du dein Programm mal in der Umgebung der Absturzstelle reichhaltig mit Messageboxen bestücken, um da entsprechende Infos herauszuziehen. Ohne Debug-Möglichkeit ist die Fehlersuche halt immer etwas anstengend :-)

Ich versteh halt net wieso es bei mir geht :( aber is wohl immer so.. bei einem gehts und der wos testen soll findet dann 1000 Fehler XD.
Diese leidvolle Erfahrung habe ich auch schon machen müssen.

Gruß
MCoder
 
Hi,

find ich echt klasse wie du hier hilfst^^
gannz großes Tennis ^^ Dankeschön!
Ja das Problem ist das ich leider im Moment von zuhause aus arbeiten muss und ihm nur immer die Dateien schicken kann und er es dann testet. :(

Ok wir haben das Problem nun eingegrenzt er fällt beim Dateischreiben hin. wahrscheinlich laut asm Datei bei nem ftprintf(); wahrscheinlich wie du oben schon mal gesagt hast en Pufferüberlauf oder sowas..
Ich hoffe das ich das jetzt hinbekomme da das Problem ja jetzt doch eingegrenzt zu sein scheint. Habs ohne die ftprints kompiliert und ihm geschickt und da liefs durch :D


Ok werd mich jetzt mal daran machen zu schaun wieso der mein ftprints net mag^^
Bzw. wieso der PC meines Kollegen sie net mag^^

Falls noch ein Tipp dazu hast worans liegen könntest immer her damit XD

Nochmals danke für die Hilfe



greetz sand13r
 
Zurück