char in int konvertieren
-
Er meint wohl eher sowas:
char myBuffer[4]; datentypMitVierBytes value; // auf 32bit systemen also int value = *reinterpret_cast<datentypMitVierBytes*>(myBuffer);
-
Die vorgestellten Möglichkeiten führen soweit ich das beurteilen kann nicht zu dem gewünschten Ergebnis. Ich denke die Frage lautet, wie man eine Zahl aus einem Zeichen gewinnt, nicht wie der Dezimalwert des (ASCII-)Buchstabens lautet. Hierzu ein Beispiel ...
#include <iostream> #include <sstream> using namespace std; int main() { char v = '5'; /* implizite Typumwandlung fuehrt nicht zum Ziel. Es wird der * Dezimalwert des Buchstabens ausgegeben anstatt der Wert. Das * Beispiel liefert 53. */ int i1 = v; cout << i1 << endl; /* Durch subtrahieren des Dezimalwerts der dem Buchstaben '0' * entspricht kann das Problem behoben werden */ int i2 = v-'0'; cout << i2 << endl; /* Alternativ laesst sich die Funktion atoi aus der * C-Standardbibliothek verwenden */ int i3 = atoi(&v); cout << i3 << endl; /* Wenn es sich anbietet kann man auch einen Stringstream zur * Umwandlung verwenden */ stringstream v2(&v); int i4; v2 >> i4; cout << i4 << endl; }
-
lucky_tux schrieb:
#include <iostream> #include <sstream> using namespace std; int main() { char v = '5'; /* Alternativ laesst sich die Funktion atoi aus der * C-Standardbibliothek verwenden */ int i3 = atoi(&v); cout << i3 << endl;Falsch.
lucky_tux schrieb:
/* Wenn es sich anbietet kann man auch einen Stringstream zur * Umwandlung verwenden */ stringstream v2(&v); int i4; v2 >> i4; cout << i4 << endl; }Falsch.
-
immer den ersten blick ins faq werfen.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html
-
@ Fachman für Buffers:
Was ist daran falsch? Ich glaube der der hier keine Ahnung hat bist eindeutig du! Mit den expliziten cast funktioniert es genauso wenig wie mit der impliziten Typumwandlung. Das Problem ist das hierbei nicht die Zahl sondern der Dezimalwert des (ASCII-)Zeichens zurückgegeben wird.
-
@lucky_tux
Fachmann für Buffer hat schon recht.
&v ist zwar ein char* aber nicht null-terminiert.
-
Aso, soetwas formales meint 'Fachman für Buffers'. Dann macht man die Zeichenkette halt eben erst nullterminiert. Aber was spricht gegen die anderen Lösungen?
-
Naja formal ist das was Du geschrieben hast korrekt.
Funktionieren tut es nur nicht. Da der stringstream ctor halt bis zur ersten '\0' einliest.
Sons ist es schon ok.
Stringstream muss seinen eigenen Puffer verwalten. DAuert daher geringfügig länger
-
Beide Varianten führen zu einer Bereichsüberschreitung beim Suchen nach \0 und sind daher beide undefiniert. Ob das jetzt eine reine Formalie ist sei dahingestellt :p
-
Nun gut jetzt wissen wir ja was gemeint war/ist!
