Probleme beim casten



  • Hallo!

    Ich hab ein unsigned short (WORD) namens timeout. Diesen lese ich ein und deswegen liegt er erstmal als String vor. Jetzt darf ich den Müll casten, ich denke mal das unsigned long okay sein dürfte. Jetzt verlangt die Methode ToULong aber eine Referenz, nur wie soll ich da beim cast jetzt noch den &-Operator unterbringen? Ohne cast könnte ich einfach &timeout schreiben...

    timeoutString.ToULong(static_cast<unsigned long>(timeout));
    


  • Lokale Variable vom Typ unsinged long, da den Kram hincasten, dessen Adresse der Funktion übergeben.



  • Denk nochmal darüber nach, ob es wirklich eine gute Idee ist, der Funktion einen short (meist 2 Byte) zu übergeben, damit diese dort einen unsigned long (meist 4 Byte) platziert.

    Ansonsten:

    timeoutString.ToULong(*reinterpret_cast<unsigned long*>(&timeout));
    


  • LordJaxom schrieb:

    Denk nochmal darüber nach, ob es wirklich eine gute Idee ist, der Funktion einen short (meist 2 Byte) zu übergeben, damit diese dort einen unsigned long (meist 4 Byte) platziert.

    Ansonsten:

    timeoutString.ToULong(*reinterpret_cast<unsigned long*>(&timeout));
    

    Das ist die Frage. In dem String sollte ( 🙄 ) ansich immer ein gültiger 2 Byte-Wert stehen, schließlich wurde der Wert vorher irgendwann mal abgespeichert.

    Kann ich dann beim einlesen da ich keine passendere Methode habe nicht einfach das ganze zu unsigned long casten? Oder kann da was schiefgehen?



  • gerge schrieb:

    Kann ich dann beim einlesen da ich keine passendere Methode habe nicht einfach das ganze zu unsigned long casten? Oder kann da was schiefgehen?

    Ja natürlich kann da was schiefgehen - die Funktion würde vier Bytes dorthin schreiben, wo nur Platz für zwei Bytes ist. Deshalb fragte ich (rhetorisch), ob Du das wirklich für eine gute Idee hälst.

    Was spricht denn gegen...?

    unsigned long ulTimeout;
    timeoutString.toULong(ulTimeout);
    // evtl. Grenzen prüfen
    timeout = static_cast<short>(ulTimeout);
    

Anmelden zum Antworten