unicode zu ascii
-
Wenn du aus einem wchar_t** einen char** machen willst, solltest du nicht einfach casten, sonst werden einfach mehrere Bits eines wchar_t als einzelne chars interpretiert. Du solltest also schon ein eigenes 2D-Array machen. %256 bedeutet Modulo 256. Damit findest du den Inhalt des letzten Bytes des wchar_t heraus.
Wozu brauchst du eigentlich den char**? Kannst du nicht mit einem wchar_t** weiterarbeiten?
-
da mein ganzes projekt auf ansi basiert wär es etwas umständlich mit wchar_t weiterzuarbeiten. was genau ist denn ein 2d array? und was ist modulo 256? ich noch nicht ganz so weit.
-
unzuas schrieb:
da mein ganzes projekt auf ansi basiert wär es etwas umständlich mit wchar_t weiterzuarbeiten. was genau ist denn ein 2d array? und was ist modulo 256? ich noch nicht ganz so weit.
Ein 2D-Array ist das, was du hier hast. (wobei ich mir nicht sicher bin, ob man das so bezeichnen kann) Jedenfalls kannst du ja so zugreifen: foo[1][2] -> zwei Dimensionen.
Das wichtigere ist jedoch Modulo. Modulo ist der Rest einer ganzzahligen Division. Beispiel: 27 modulo 4 ist 3, da 27/4 = 6 Rest 3.
Wenn du jetzt also (char)(foo[x][y] % 256) rechnest, kommen die unteren 8 Bits raus.
-
unzuas schrieb:
da mein ganzes projekt auf ansi basiert wär es etwas umständlich mit wchar_t weiterzuarbeiten. was genau ist denn ein 2d array? und was ist modulo 256? ich noch nicht ganz so weit.
char 1darray[] = "..............."; char 2darray[][] = { "...............", "...............", "...............", "...............", };Modulo:
http://de.wikipedia.org/wiki/Division_mit_RestIst eigentlich eher standard..

-
unzuas schrieb:
wie kann ich mein wchar_t **foo zu char **bar umwandeln?
In der Praxis würde ich anraten, die Umwandlung vom Betriebsystem erledigen zu lassen, das kann das höchstwahrscheinlich sehr gut. Welches darf's denn sein?
wxSkip schrieb:
(wobei ich mir nicht sicher bin, ob man das so bezeichnen kann)
Würde ich eher nicht so bezeichnen. Es ist ein Array von wchar_t, und wenn ich kann, werde ich wchar_t auf einen "atomaren" Typ festlegen.
-
mngbd schrieb:
Würde ich eher nicht so bezeichnen. Es ist ein Array von wchar_t, und wenn ich kann, werde ich wchar_t auf einen "atomaren" Typ festlegen.
Du meintest ein Array von wchar_t *?
Wobei ich es eher als ein Array von Wide-Character-Strings bezeichnen würde.
-
mngbd schrieb:
Welches darf's denn sein?
windows
-
wxSkip schrieb:
Du meintest ein Array von wchar_t *?
Wobei ich es eher als ein Array von Wide-Character-Strings bezeichnen würde.Ich hatte einen Stern übersehen, sorry. Das Array von Zeigern würde ich aber sicherheitshalber auch nicht 2d-Array nennen. Oder doch?
unzuas schrieb:
windows
Abwarten, Tee trinken, da findet sich sicher was.
-
unzuas schrieb:
mngbd schrieb:
Welches darf's denn sein?
windows
Falls du einmal den umgekehrten Weg gehen willst bzw. musst, heißt das Pendant logischerweise MultiByteToWideChar.
-
und wie genau allocier ich mein char **bar damit WideCharToMultiByte funktioniert?
-
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Man kann schon seltsames Zeug veranstalten ....
Hier mal eine Holzhammermethode, die immer klappt solange der Unicodestring nur ASCII-darstellbare Zeichen enthält:
C++
std::string make_narrow(const std::wstring wide_string) { return std::string(wide_string.begin(), wide_string.end()); }C
const char* make_narrow(const wchar_t* orig, char* buffer, unsigned int buffer_len) { for(unsigned int i = 0; i < buffer_len; ++i) buffer[i] = orig[i]; return buffer; }
-
Das hilft auch weiter:
http://www.c-plusplus.net/forum/276277
http://www.c-plusplus.net/forum/260205-10