Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 11:11

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Komische Zeichen

Discussion on Komische Zeichen within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Aug 2009
Posts: 127
Received Thanks: 27
Komische Zeichen

Hallo nocheinmal,

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?
theredvex is offline  
Old 07/05/2012, 14:24   #2
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
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.
Nightblizard is offline  
Old 07/05/2012, 20:43   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Quote:
WideCharToMultiByte
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.
MrSm!th is offline  
Old 07/05/2012, 21:07   #4
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
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.
Nightblizard is offline  
Old 07/05/2012, 21:33   #5
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
C tuts auch.

was machst du da eigtl für seltsames zeug?
warum kopierst du den string erst in einen buffer?
machst du dazwischen noch i-was?


Das hier sollte gehen, wenn nicht noch zusätzlich das zutrifft, was MrSmith vermutete.
Code:
int len = wcslen((wchar_t*)PtrString);
char* CharBuf = new char[len+1];
wcstombs(CharBuf, (wchar_t*)PtrString, len+1);
Dr. Coxxy is offline  
Old 07/05/2012, 22:21   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Quote:
Originally Posted by Nightblizard View Post
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.
MrSm!th is offline  
Old 07/05/2012, 23:18   #7
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
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!
Nightblizard is offline  
Old 07/05/2012, 23:43   #8
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
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.
Dr. Coxxy is offline  
Reply


Similar Threads Similar Threads
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.



All times are GMT +1. The time now is 11:11.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.