reinterpret_cast



  • Beispiel:

    short var1 = 10, var2 = 0x100;
    outFile.write("Emil Maier",10);
    outFile.write(reinterpret_cast<char*>(&var1),
                   sizeof(var1));
    outFile.write(reinterpret_cast<char*>(&var2),
                   sizeof(var2));
    

    hier wird Adresse von var1 zu char* gecastet. Was ist das?
    hier var1 = 10, Adresse kann 0x2452 sein, dann heisst es 24521 zu '2','4','5','2'
    konvertiert.Das Ergebnis sollte aber '0A' sein.



  • hier wird Adresse von var1 zu char* gecastet. Was ist das?

    Die Adresse von var1 wird in die Adresse eines chars gecastet, sozusagen. Man tut so, als wär an der Adresse von var1 gar kein short gespeichert, sondern ein char.

    hier var1 = 10, Adresse kann 0x2452 sein, dann heisst es 24521 zu '2','4','5','2'

    '2', '4', '5', '2' ist aber kein char-Pointer, sondern soll wohl ein char-Array. So eine Umwandlung findet hier nicht statt (sowas gibts auch gar nicht in der Sprache).

    Dein Code führt dazu, dass hintereinander die short-Werte 10 und 256 in eine Datei geschrieben werden. Nehmen wir einen Intel-PC mit sizeof(short)=2 an, dann ist das die Byte-Sequenz 0x0A, 0x00, 0x00, 0x01.



  • Die Adresse von var1 wird in die Adresse eines chars gecastet, sozusagen

    das verstehe ich nicht, damit ist ein temp char erzeugt?



  • Lies dir auch den nachfolgenden Satz durch - damit wird's klarer 😉



  • Man tut so, als wär an der Adresse von var1 gar kein short gespeichert, sondern ein char.

    wenn in var1 ein short gespeichert ist, der Inhalt is "0A",in diese Adresse dürfen nicht 2 chars speichern,nämlich '1' und '0'.



  • netrobot schrieb:

    wenn in var1 ein short gespeichert ist, der Inhalt is "0A"

    "0A" ist ein String, kein Short. (Ich weiß dass du 0x0A meinst)

    in diese Adresse dürfen nicht 2 chars speichern,nämlich '1' und '0'.

    Den Inhalt dieser Adresse kann man aber auch als 2 chars interpretieren. Was genau herauskommt, ist systemspezifisch. Ein konkretes und dich wahrscheinlich betreffendes Beispiel hatte ich genannt.



  • #include <iostream>
    using namespace std;
    
    int main()
    {
    	short x = 10;
    	char *bytes = reinterpret_cast<char *>(&x);
    	int n = sizeof(short);
    
    	cout << n << " Bytes:" << endl;
    	for (int i=0; i<n; ++i)
    		cout << "Byte " << (i+1) << ": " << static_cast<int>(bytes[i]) << endl;
    
    	cin.get();
    }
    

Anmelden zum Antworten