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 konvertieren

    gruß 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 aus static_cast , reinterpret_cast und const_cast ausgedrückt werden kann, um einen Wert des Typs T aus dem Ausdruck a 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


Anmelden zum Antworten