string Zeichen in einen Int umwandeln mit DOS Zeichensatz
-
Ich habs mal irgendwie hingekriegt ein Zeichen in einen Int umzuwandeln nach der Windows Dos Zeichentabelle.
EDIT: ASCII
Praktisch wird aus zb A eine 65 und aus a eine 97 usw.
(ALT + ZAHL = BUCHSTABE)So wie ich das gemacht hatte ("falsch umgewandlt") ging das aber nicht mit zahlen,
denn dann wurde aus 1 - 1 und nicht 49.Das bräuchte ich aber relativ dringend ☻•◘○ ^^
Gut ich hoffe das das geht, und das nehme ich stark an.
-
char wird intern doch ohnehin als zahl repräsentiert.
also brauchst du nur ein char aus dem zeichen machen.char c= '1'; int i = (int) c; std::cout << i << std::endl;
jperl
-
achso ok, ja das ist nicht Problematisch
╦ ╔╦ N
Die Formelsammlung ist da sehr nützlich, immer alles auf einem Blick
und adnersrum gehts genauso ?
-
Tim06TR schrieb:
und adnersrum gehts genauso ?
Ja - bedenke allerdings, dass Bits, die nicht in den Zieltypen passen, abgeschnitten werden.
Im Übrigen ist ein Cast nicht einmal erforderlich (wegen der impliziten Konvertierung). Allerdings kann es nützlich sein, eine Typumwandlung dadurch zu verdeutlichen.
-
ansich ja. musst halt schaun, ob das mit all den sonderzeichen usw hinhaut.
int i = 10; char c1 = (char) i; std::cout << c1 << std::endl;
jperl
-
UPS
Das ergebnis ist: 59344216
Das sollte aber nicht sein ^^Ich dachte eher an eine 72
Wie kommt das denn, ist das hier der falsche Zeichensatz ? Möglicherweise UNICODE ?
-
Tim06TR schrieb:
UPS
Das ergebnis ist: 59344216
Das sollte aber nicht sein ^^Ich dachte eher an eine 72
Wie kommt das denn, ist das hier der falsche Zeichensatz ? Möglicherweise UNICODE ?
das ergebnis wofür ist 59344216?
jperl
-
H hab ich vergessen
-
ich weiß ja nicht was du machst, aber das gibt mir 72 aus.
char c = 'H'; int i = (int) c; std::cout << i << std::endl;
jperl
-
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.