widestrings in einfache strings konvertieren
-
ehrlich wo denn genau. für mich sieht das alles wie konvertierung string in widestring aus. wie müsste dann danach mein Code aussehen?:
use_facet<ctype<wchar_t> > (cout.getloc()).widen(sbuffer,sbuffer*2,buffer)
2. Problem, ich habe hier embedded VC++. Das kennt weder use_facet noch _USE oder welchen header muss man einbinden. Mir muss mal hier kurz auf die sprünge geholfen werden.
-
Stimmt, es steht wirklich nicht drin. Hab mich wohl verlesen.
-
Vielleicht gehts ja mit sprintf. Bei mir kompilierts jedenfalls.
-
mit sprintf(sbuffer,"%s",buffer);
wird das erste zeichen in sbuffer geschrieben und sbuffer ist 1 byte groß. da fehlt noch was.
-
Ich hatte folgendes getestet und das hat auch funktioniert.
char* test = new char[20]; wchar_t* wtest = L"Hallo"; sprintf(test,"%s",wtest);
-
und wie ermittelts du die byte länge von sbuffer (oder bei dir test)? also ich komm hier immer nur auf länge 1.
strlen(sbuffer)*sizeof(char);
-
Machs mal so
sprintf(test,"%S",wtest);Das *sizeof(char) kannst du übrigens weglassen.
-
ja das hab ich ja schon gemacht.
du meinst wohl eher: i=strlen(sbuffer)also bei mir kommt immer noch für i 1 raus und gespeichert wird nur das erste zeichen. bei dir nicht? ich weiss ab hier nicht mehr alzu weiter.
-
Wenn das S im Formatstring groß ist, funktioniert bei mir alles (Compiler BCB5). Ich teste das gleich mal mit einen anderen Compiler.
-
Funktioniert so auch mit DevCpp.
-
au schei... das große S hab ich gar nicht gesehen. ja funktioniert

und wenn ich aus dem string einen widestring wieder machen will (also wieder in die andere richtung), dann benutz ich einfach L" ", richtig?was bedeutet das große S im gegensatz zum kleinen s?
-
%S ist aber kein Standard. Man sollte lieber %ls verwenden. (sagt zumindest die Manpage bei mir)
-
Folgendes habe ich in der Hilfe zu meinem Compiler gefunden
The following table shows the formatted output specifiers for the Unicode family of functions. The table shows how the format specifier is used by printf and the Unicode family of output functions to output strings and characters.
Format specifier printf function Unicode function
%c narrow wide
%C wide narrow
%hc narrow narrow
%hC narrow narrow
%lc wide wide
%lC wide wide
%s narrow wide
%S wide narrow
%hs narrow narrow
%hS narrow narrow
%ls wide wide
%lS wide wide
-
Verwirrendes Zeug
Die Manpage (unter Suse 9.3) behauptet, %ls sei das selbe wie %S, nur dass man %S nicht benutzen soll, weil es kein Standard ist.wcsrtombs (aus wchar.h / cwchar) soll wohl aber definitiv ANSI C sein und das gewünschte tun.
-
in der msdn find ich ja nix zu diesen einzelheiten...oder bin ich blind
-
Mit %ls funktioniert das auch.
-
Rio1 schrieb:
ehrlich wo denn genau. für mich sieht das alles wie konvertierung string in widestring aus. wie müsste dann danach mein Code aussehen?:
use_facet<ctype<wchar_t> > (cout.getloc()).widen(sbuffer,sbuffer*2,buffer)
eigentlich sieht der code fast genauso aus:
wchar_t wstring[6] = L"Hallo"; char string[6]; use_facet<ctype<wchar_t> > (cout.getloc()).narrow(wstring, wstring+6,'?', string);
-
danke, aber geht das auch mit embedded VC++? Welche header müssen dazu eingebunden werden (das use_facet, ctype ... werden als compilererror angezeigt)
-
müsste <locale> sein
-
#include <locale.h> konnte ich zwar einbinden aber folgende Compiliermeldung:
errorC2065: 'use_facet' : undeclared identifier errorC2065: 'ctype' : undeclared identifier errorC2275: 'wchar_t' : illegal use of this type as an expression errorC2059: syntax error : '>'klappt irgendwie nicht damit.