char zu int will nicht
-
hallo Forum,
habe folgendes Problem:ich habe eine Variable vom Typ char, die den Wert '0x7F' enthält.
Wenn ich diese Variable einer Varible vom Typ int zuweise enthält diese
den Wert -81, was muss ich tun um diesen char zu int zu konvertierengruß uracil
-
#include <iostream> int main() { char c = 0x7F; int i = c; std::cout << i << std::endl; return 0; }
Ausgabe: 127
Dein Problem ist nicht nachvollziehbar.
-
#include <iostream> int main(void) { char meinChar = 0x7F; std::cout << (int)meinChar; }
-
mein bereich war bis 255 der wert 7f schien noch zu funktionieren aber höhere werte nicht
das prob war das ein unsigned nötig war total peinlich trotzdem danke
-
EOutOfResources schrieb:
#include <iostream> int main(void) { char meinChar = 0x7F; std::cout << (int)meinChar; }
Das is aber C und kein C++. In C++ nimmt man wenn für sowas static_cast, wobei ich auch die Lösung von löälöä bevorzugen würde.
Lg freeG
-
Ob char nun signed oder unsigned ist, ist nicht festgelegt.
Ein char hat min. 1 Byte. Wenn es bei dir nun signed ist und 1 Byte hat, dann passt eben alles von 0bis127 (wobei 0x7F gerade noch reinpasst), ansonsten ist ein signed overflow undefined behaviour (darum bekamst du -81).
-
fr33g schrieb:
Das is aber C und kein C++. In C++ nimmt man wenn für sowas static_cast, wobei ich auch die Lösung von löälöä bevorzugen würde.
"Die C++ Programmiersprache - Auflage 4 - Bjarne Stroustrup" - Seite 140 - Achtunterste Zeile:
C++ hat von C die Schreibweise
(T)a
geerbt, die jede Konvertierung ausführt, die als Kombination ausstatic_cast
,reinterpret_cast
undconst_cast
ausgedrückt werden kann, um einen Wert des TypsT
aus dem Ausdrucka
zu erzeugen (§B.2.3).
-
EOutOfResources, ich denke es ist klar, was fr33g damit sagen wollte. Auch wenn C-Casts wie so viele andere Dinge aus C in C++ weiterhin möglich sind, bietet C++ dafür bessere Alternativen, nämlich C++-Casts. Was genau daran besser ist, wurde hier schon oft diskutiert.
-
Gugelmoser schrieb:
Ob char nun signed oder unsigned ist, ist nicht festgelegt.
Das ist unpräzise formuliert. char ist nie signed char und auch nie unsigned char; das sind 3 verschiedene Typen. Zwei von den dreien haben nur denselben Wertebereich.
Gugelmoser schrieb:
Ein char hat min. 1 Byte.
Per Definition hat char genau ein Byte. Nur kann ein Byte aus mehr als 8 Bits bestehen. Ein Byte bleibt trotzdem das kleinste, was man adressieren kann.
Gugelmoser schrieb:
Wenn es bei dir nun signed ist [...] dann passt eben alles von 0 bis 127 [...],
Na, -127...-1 passt dann da auch rein.
kk
-
krümelkacker schrieb:
Na, -127...-1 passt dann da auch rein.
War das ein Tippfehler oder hast du bewusst die -128 nicht includiert?
-
XSpille schrieb:
krümelkacker schrieb:
Na, -127...-1 passt dann da auch rein.
War das ein Tippfehler oder hast du bewusst die -128 nicht includiert?
Das war Absicht. Der C und C++ Standard garantiert nur SCHAR_MIN <= -127. Das liegt daran, dass er nicht festlegt, wie negative Zahlen dargestellt werden. Mögliche Darstellungsformen sind Zweierkomplement, Einerkomplement und Vorzeichen/Betrag.
-
krümelkacker schrieb:
XSpille schrieb:
krümelkacker schrieb:
Na, -127...-1 passt dann da auch rein.
War das ein Tippfehler oder hast du bewusst die -128 nicht includiert?
Das war Absicht. Der C und C++ Standard garantiert nur SCHAR_MIN <= -127. Das liegt daran, dass er nicht festlegt, wie negative Zahlen dargestellt werden. Mögliche Darstellungsformen sind Zweierkomplement, Einerkomplement und Vorzeichen/Betrag.
Genau das hatte ich schon fast vermutet, wollte nur die Bestätigung haben.
THX