ich habe gerade mit Folgender Funktion einen Pointer ausgelesen
Code:
wchar_t *buffer;
int len = wcslen((wchar_t*)PtrString);
buffer = new wchar_t[len+1];
wcscpy(buffer,(wchar_t*)PtrString);
char * charbuffer = new char[wcslen(buffer)+1];
wcstombs(charbuffer,buffer,wcslen(buffer));
Wie man vlt erkennen kann, lese ich erst nen UNICODE string ausm Ram und convertiere ihn dann in CHAR/String. da kommt leider folgendes Ergebnis raus.
Quote:
LoadingÍýýýýÝÝÝÝÝÝÏ·Õ§w
wie entferne ich, oder sorge schon bei der Convertierung vor, sodass die nichtlesbaren zeichen nicht mitkonvertiert werden?
Hey,
du solltest dir folgende Funktionen einmal genauer anschauen:
Oder du machst es gleich sauber und nutzt C++:
Code:
const wchar_t* nastyPtr = L"Hallo Welt";
std::wstring wstr = nastyPtr; //Natürlich kannst du nastyPtr durch L"Hallo Welt" ersetzen. Das habe ich nur geschrieben, da du etwas von einem Pointer erzählt hast.
std::string str(wstr.begin(), wstr.end());
std::cout << str << std::endl;
Damit ist es auch gleich Plattformunabhängig, sauberer und wahrscheinlich auch schneller.
Arbeitet doch genau wie wcstombs und std::string wird in seinem Konstruktor wohl das gleiche Problem haben.
Liegt es vielleicht daran, dass im Speicher das 0 Byte fehlt?
Was ist denn, wenn du den String mal wirklich als UNICODE String ausgibst? Sind da irgendwelche Zeichen, die nicht im ASCII Code dargestellt werden können oder wieso willst du eben solche rausfiltern?
Sieht für mich eher nach nem Versuch aus, Zeichen umzuwandeln, die nicht dazugehören.
Nein, std::string hat nicht das gleiche Problem, ansonsten hätte ich diese Lösung nicht vorgeschlagen.
Der Grund warum sein Code nicht funktioniert ist, weil new char[x] einfach nur x Elemente für sein Char-Array allokiert. Er behandelt das Char-Array wie einen String, jedoch muss ein C-String durch eine Null terminiert werden und das ist hier einfach nicht der Fall, deshalb wird mehr ausgegeben als eigentlich im String steht (bis zur nächsten 0 im RAM).
Sprich, er kann auch einfach vor wcstombs ZeroMemory(charbuffer, wcslen(buffer)+1); schreiben, doch wie ich bereits sagte, die C++ Variante ist um Welten lesbarer als dieser kryptische Mist.
C++ kann so schön sein, wenn man es denn auch nutzt.
Nein, std::string hat nicht das gleiche Problem, ansonsten hätte ich diese Lösung nicht vorgeschlagen.
Der Grund warum sein Code nicht funktioniert ist, weil new char[x] einfach nur x Elemente für sein Char-Array allokiert. Er behandelt das Char-Array wie einen String, jedoch muss ein C-String durch eine Null terminiert werden und das ist hier einfach nicht der Fall, deshalb wird mehr ausgegeben als eigentlich im String steht (bis zur nächsten 0 im RAM).
Sprich, er kann auch einfach vor wcstombs ZeroMemory(charbuffer, wcslen(buffer)+1); schreiben, doch wie ich bereits sagte, die C++ Variante ist um Welten lesbarer als dieser kryptische Mist.
C++ kann so schön sein, wenn man es denn auch nutzt.
Doch, std::string hätte dasselbe Problem. Wenn im Speicher eine 0 fehlt, dann wird bei deinem std::wstring wstr = nastyPtr der Fehler ebenso eintreten.
Das soll nicht heißen, dass ich dir nicht Recht gebe, der C++ Weg ist trotzdem um einiges schöner.
Achso, ja klar! Wenn die 0 fehlt, dann funktioniert das natürlich nicht. Da habe ich dich falsch verstanden, tut mir leid.
@Coxxy:
Wenn schon C, dann auch richtig. Dieses C/C++ Gemische führt in unerfahrenen Händen (hier z.B.) zu explosiven Code. Vertraut in C++ der STL, das macht das Leben wesentlich leichter!
statt new malloc, ich sehe jedoch kein problem darin, new zu benutzen.
dein "tipp" mit ZeroMemory ist übrigens unnötig, es reicht wcstombs stringlen auch das 0 zeichen mitzugeben.
EDIT:
ich behaupte außerdem einfach mal, dass diese methode um einiges schneller als deine c++ methode ist, habs zwar nicht ausprobiert, sollte aber so sein, auch wenn ich die implementierung von wcstombs natürlich nicht kenne.
Komische Zahlen/Zeichen 01/10/2012 - Metin2 Private Server - 4 Replies Guten Tag evp,
Ich habe eine Frage, undzwar immer wenn ich auf meinen Server Connecte (Mich einlogge) kommen in VitualPC diese Zahlen/Zeichen:
http://s7.directupload.net/images/120110/nxwu4l3k .png
Der Server stürzt zwar nicht ab und läuft gut, aber immer wenn sich jemand einloggt kommt das selbe wieder und wieder...
Vielen Dank schonma!
Easymetin2 geht nicht! - Komische Zeichen! 07/03/2011 - Metin2 - 13 Replies Hallo...
Ich habe mir grade Easymetin2 gekauft, und dann habe ich alles eingeben...
Aber dann habe ich Easymetin2 neu gestartet..
und dann kommt die ganze Zeit das hier:
http://img7.imagebanana.com/img/ruyke5sg/thumb/Un benannt.png
Habs auch schon neu gedownloadet unso.. Kompatibilitätsmodus auf Windows98 / ME gestellt.. Nix klappt..
Bitte um hilfe..
Und ich weiss das ich das hier nicht posten darf, aber NIEMAND antwortet im Fragen und Antworten Thread! Also bitte ich um Verständnis.....
Komische zeichen im namen metin2 10/06/2010 - Off Topic - 9 Replies Âlso wie in der überschrift zu lesen will ich wissen wie man so komische zeichen so wie ° oder andere in den namen macht???
Bei mir steht charackter kan nicht erstllt werden warum weiß ich nicht
Bitte um lösung:D
Hilfe komische Zeichen 05/12/2010 - Metin2 Private Server - 2 Replies Hilfe was ist das:
das taucht nach ner Zeit auf und immer etwas verschieden.
98 02 cb 11 8d e0 f2 5e 5a 11 bb 7a f5 a6 3c fd | .....àò^..»zõ¦<ý
bd ff 25 87 85 31 44 e8 39 14 c9 6c 06 ef 5c 84 | ½ÿ...1Dè..É..ï..
35 b0 d1 a5 5f 9a fe 00 68 82 b9 14 12 70 63 06 | 5°Ñ¥.........p..
ee 1d 6d 52 66 83 d8 17 cf 0d e7 47 a5 3b d7 ff | ..mR......çG¥;×ÿ
5e 59 0d bb a5 e4 a8 80 d2 72 61 1f 88 65 25 97 | ^..»¥ä..Òr...e..
a5 9d ff 3f 00 2c 04 10 76 c7 1d 8b ac 3c e2 39 | ..ÿ.....v...¬<â9
cd 0f a2...
Komische Zeichen.. 11/11/2009 - Metin2 Private Server - 2 Replies Hey Com,
wenn ich mein P-Server starte, passiert eig nix.. dann nach vll 2-3 Stunden kommen auf einma so komische zeichen:
http://www.fotos-hochladen.net/komischezeichenoo4 d1ci5oa.jpg
Was haben die zu bedeuten?
Der Server läuft dabei noch normal weiter..
Mfg.