|
You last visited: Today at 07:11
Advertisement
Komische Zeichen
Discussion on Komische Zeichen within the C/C++ forum part of the Coders Den category.
07/04/2012, 22:37
|
#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:
wie entferne ich, oder sorge schon bei der Convertierung vor, sodass die nichtlesbaren zeichen nicht mitkonvertiert werden?
|
|
|
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.
|
|
|
07/05/2012, 20:43
|
#3
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Quote:
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.
|
|
|
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.
|
|
|
07/05/2012, 21:33
|
#5
|
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);
|
|
|
07/05/2012, 22:21
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Quote:
Originally Posted by Nightblizard
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.
|
|
|
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!
|
|
|
07/05/2012, 23:43
|
#8
|
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.
|
|
|
 |
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 07:12.
|
|