Winsock2 Unicode Beispiel
-
Hallo
Kann mir jemand ein Beispiel für Unicode recv/send mit Winsock2 geben?
Hab schon mit Google gesucht, aber nicht gefunden.
-
Was hat Unicode mit Winsock zu tun? Entweder Du hast Unicode in Deinem Buffer stehen oder irgendeine andere Kodierung - das ist send und recv sowas von egal.
-
Ich weiss, hab ich auch versucht, aber wenn ich versuche mit
USES_CONVERSION; char szBuffer[1029] = {0}; rc = recv(Irc->Socket, szBuffer, 1028, 0); szBuffer[rc] = '\0'; cout << "1:" << szBuffer << endl << "2: " << W2A((wchar_t*)szBuffer) << endl;
funktioniert es nicht.
-
Julian19 schrieb:
szBuffer[rc] = '\0';
Wenn Du mit Unicode UTF16 meinst, brauchst Du hier 2 Nullbytes.
cout << "1:" << szBuffer << endl << "2: " << W2A((wchar_t*)szBuffer) << endl;
2 verschiedene Kodierungen auf den gleichen Stream schreiben... Glaube nicht, dass das eine gute Idee ist.
funktioniert es nicht.
Das ist keine Fehlerbeschreibung.
-
Da kommen so ganz viele "??????????????????????".
-
char szBuffer[1029]; ... W2A((wchar_t*)szBuffer) ...
Weißt Du überhaupt was Du da machst? Das ist blanker Unfug....
Was sagt der Debugger zum Buffer-Inhalt? Was hast Du da empfangen?
Mach es lieber gleich richtig so (ohne Compilerlauf geprüft, nur das Prinzip aus dem Ärmel geschüttelt):
USES_CONVERSION; union { char szBuffer[1030] = {0}; wchar_t wszBuffer[516] = {0}; } Multibuffer; rc = recv(Irc->Socket, Multibuffer.szBuffer, 1028, 0); //Prüfen, ob rc kleiner/gleich 1028 ist!! //Für Unicode-Übertragung muß rc einen geradzahligen Wert haben, ansonsten hast Du ein Konvertierungsproblem! Multibuffer.szBuffer[rc] = '\0'; Multibuffer.szBuffer[rc+1] = '\0'; //Doppelte Nullterminierung wegen Unicode! cout << "1:" << Multibuffer.szBuffer << endl << "2: " << W2A(Multibuffer.wszBuffer) << endl;
HTH,
Martin
-
Mmacher schrieb:
char szBuffer[1029]; ... W2A((wchar_t*)szBuffer) ...
Weißt Du überhaupt was Du da machst? Das ist blanker Unfug....
Was sagt der Debugger zum Buffer-Inhalt? Was hast Du da empfangen?
Mach es lieber gleich richtig so (ohne Compilerlauf geprüft, nur das Prinzip aus dem Ärmel geschüttelt):
USES_CONVERSION; union { char szBuffer[1030] = {0}; wchar_t wszBuffer[516] = {0}; } Multibuffer; rc = recv(Irc->Socket, Multibuffer.szBuffer, 1028, 0); //Prüfen, ob rc kleiner/gleich 1028 ist!! //Für Unicode-Übertragung muß rc einen geradzahligen Wert haben, ansonsten hast Du ein Konvertierungsproblem! Multibuffer.szBuffer[rc] = '\0'; Multibuffer.szBuffer[rc+1] = '\0'; //Doppelte Nullterminierung wegen Unicode! cout << "1:" << Multibuffer.szBuffer << endl << "2: " << W2A(Multibuffer.wszBuffer) << endl;
HTH,
MartinDas funktioniert bei mir nicht
-
WAS funktioniert nicht?
Das Compilieren?
Die Funktion recv()?
Die Ausgabe an cout?
Dein PC funktioniert nicht?Und nochmal die wichtigste Frage:
Was sagt der Debugger zum Buffer-Inhalt? Was hast Du da empfangen? Wie sieht er Byte für Byte aus?Welchen Wert hat rc?
Und vor allem, ich muß davon ausgehen, daß Du weißt was Unicode ist?
Martin