string Zeichen in einen Int umwandeln mit DOS Zeichensatz
-
ok dann weiß ich zumindest, dass es nicht daran liegt
-
ähm mit const char* gehts nicht hab ich recht oder unrecht ?
Könnte daran liegen. Also wie war das noch string in char ?
-
Tim06TR schrieb:
ähm mit const char* gehts nicht hab ich recht oder unrecht ?
Könnte daran liegen. Also wie war das noch string in char ?hm naja ein const_cast ginge.
zwar nicht schön aber funktioniert.ansonsten ein char* mit stringlänge+1 erzeugen und strcpy verwenden.
jperl
-
Tim06TR schrieb:
ähm mit const char* gehts nicht hab ich recht oder unrecht ?
Könnte daran liegen. Also wie war das noch string in char ?Ähm, versuchst du etwa einen char* in int umzuwandeln? Du musst den natürlich vorher erst dereferenzieren! Ansonsten hast du dir vorher einfach nur die Speicheradresse ausgeben lassen auf die der char* zeigt.
-
ohhhh
mit char*
kommt 1239840
raus, moment, ich glaub daran liegts nicht, Dev-Cpp liefert das richtigeMFC Nicht, mist ich glaub hier ist ein Verschub nötig.
int Num; char c[1]; const char* C; if (UseStringList == true) { Num = ZeichenToInt(Zeichen,Parameter[2]); } else { MessageBox::Show("PAUSE"); C = Zeichen.c_str(); strcpy(c,C); Num = (int) c; } std::string debug; std::stringstream NumInterpreta; NumInterpreta << Num; debug=NumInterpreta.str(); NumInterpreta.clear(); NumInterpreta.str(""); String^Output = gcnew String(debug.c_str()); richTextBox3->Text = Output;
Was ist hier Falsch ?
-
Num = (int) (*c);
würde ich mal sagen.
jperl
-
Oh es geht !
(adressen zu lesen ist bitter)
-
Einer der Gründe, warum ich die C++-Cast-Operatoren vorziehe.
Hätte statt
Num = (int) c;
Folgendes gestanden:
Num = static_cast<int>(c);
(oder kein Cast), wäre ein Compilerfehler erzeugt worden. Aber durch das Einsetzen des rücksichtslosen C-Casts biegst du hin, was nur geht.
-
const char* c; c = (const char*) (&NewNum); Result = c;
warum geht das nicht wenn die Zahlen größer als 255 werden ?
Er gibt mir dann immer 2 Zeichen !
-
Warum castest du einfach, um Compilerfehler zu umgehen? Das ist selten eine Lösung. Und gerade wenn man sich noch so unsicher ist, sollte man keine C-Casts verwenden (es sei denn, man besitzt masochistische Züge).
Abgesehen davon: Was soll uns der Code sagen? Was ist
NewNum
? Was willst du erreichen?
-
Tim06TR schrieb:
warum geht das nicht wenn die Zahlen größer als 255 werden ?
Er gibt mir dann immer 2 Zeichen !Da char normalerweise als 1-Byte bzw 8-Bit definiert ist, und 256 das Größte ist was man in 8-Bit stopfen kann (2^8) ist selbstverständlich bei 255 Schluß (0-255).
const char* c; c = (const char*) (&NewNum); Result = c;
Zeig mal mehr Code. Kann nicht verstehen warum du einem const char-Zeiger die Addresse eines Ints zuweisen möchtest.
-
ok das leuchtet ein.
Wie ich auf mehr kam, ist mir eh nicht Schlüssig, jetzt habe ich diese
Faktor ausgeschaltet und NewNum kann maximal 255 sein
-
Wie kann ä -28 sein ???
bei
Zeichen = äC = Zeichen.c_str(); Num = (int) (*C);
Das darf nicht sein, sonst löst mein Prog einen Fehler aus, weil es eine Zahl
unter 0 nicht verträgt
-
Tim06TR schrieb:
Wie kann ä -28 sein ???
Der Typ
char
kann sich wiesigned char
undunsigned char
verhalten, je nach Implementierung.Tim06TR schrieb:
Das darf nicht sein, sonst löst mein Prog einen Fehler aus, weil es eine Zahl
unter 0 nicht verträgtDieser Fehler ist natürlich streng geheim, oder wie?
Zum dritten Mal: Du löst keine Probleme, indem du einfach Casts einsetzt! Dazu müsste man wissen, was man tut, und das ist bei dir offensichtlich nicht der Fall. Wenn du es nicht endlich zu Stande bringst, zu sagen, was du erreichen willst und nicht wie, wird das auch weiterhin so bleiben. Ist es denn wirklich so schwer, ein Problem vernünftig zu beschreiben?
-
Ich dachte das wäre klar geworden. ALSOOO
Ich muss ein belibiges Zeichen in eine Zahl umwandeln, wie der Comp das macht ist mir Schnuppe, Hauptsache es kommt immer dasselbe raus und wichtig ist, dass die Zahl größer als 0 Null ist.
Es ist KEINE MÖGLICHKEIT eine große Tabelle anzulegen, wo steht welches Zeichen welche Zahl ist, dass muss doch auf irgendwie anders gehen.
Möglichst eine Zahl im Dezimalen System, Binär oder Hex sind aber genauso möglich.Die Methode Oben hatte bis auf den Angesprochenen Fehler aber auch gut Funktioniert.
SO Das nochmal zu dem was ich will.
-
Und was ist genau das Problem an der Lösung auf der ersten Seite?
char zeichen = 'a'; int nummer = static_cast<int>(nummer);
(Es ist eigentlich total unnötig zu casten oder überhaupt einen anderen Typ zu nehmen, da
char
s auch integrale Typen sind. Aber für das Prinzip...)Und falls du nur Zahlen grösser als Null willst, nimmst du eben
unsigned char
.
-
unsigned war der Springende Punkt, danke jetzt gibt er mir meinen Erwarteten Wert
aus. (Expectet Value Recieved :p , an alle Compiler dieser Welt)DANKE !
-
Okay, das wäre aber auch einfacher gegangen...
Vielleicht fürs nächste Mal gleich sagen, was du erreichen willst und nicht etliche fehlgeschlagene Versuche darstellen, anhand denen wir erraten müssen, was dir überhaupt wichtig ist.