Typenumwandlung short auf char[]



  • Ich will auf einem Arduino über den COM-Port ein Integer Binär ausgeben.

    Dafür verwende ich Serial.write, welches so deklariert ist.

    virtual size_t write(uint8_t) = 0;
        virtual size_t write(const uint8_t *buffer, size_t size);
        size_t write(const char *buffer, size_t size) {
          return write((const uint8_t *)buffer, size);
        }
    

    Sowas funktioniert, da es ja eine Array of Char ist.

    const int size = 4;
    char buf[size];
    
    Serial.write(buf, 4);
    

    Wie kann ich aber ein short mit Serial.write ausgeben ?

    Folgendes habe ich probiert, gibt aber nur ein Syntax-Fehler.

    int l;
    l = 12345;
    Serial.write((char) l, 2)
    

    Serial.write(&l, 2)[/code]

    Jemand eine Idee ?

    Jetzt habe ich es so gelöst, ist aber in meinen Augen nicht so elegant.

    Serial.write(l & 0xFF);          // LSB
    			Serial.write(l >> 8);            // MSB
    


  • int l;
    l = 12345;
    Serial.write(reinterpret_cast<char*> (&l), sizeof(l));
    


  • int ist nicht short



  • Danke,

    So klappt es. 🙂

    unsigned short l;
    l = 12345;
    Serial.write(reinterpret_cast<char*> (&l), 2);
    

    int ist nicht short

    Ich habe mich verschrieben, da auf den Atmegas ein int auch nur 16Bit hat.



  • Ich habe festgestellt, mit reinterpret_cast<char>* kann man recht viel machen.
    Es funktioniert nicht nur bei short, es funktioniert auch bei Ganzen struct-Blöcken.

    Ich habe noch eine kleine Ergänzung gemacht:

    #define toPChar(pointer) reinterpret_cast<char*>(&pointer)
    

    Somit sieht mein Quell-Code einiges übersichtlicher aus:

    //				Serial.write(reinterpret_cast<char*>(&adcBuf.Data0), l * 4);
    				Serial.write(toPChar(adcBuf.Data0), l * 4);
    

    Bevor ich reinterpret_cast kannte, hatte ich für die Daten-Blöcke einen Umweg über eine Union gemacht.



  • Schön, dass du zumindest bemerkt hast, dass reinterpret_cast<> einen aussagekräftig beschissen langen Namen hat.

    Mach jetzt nur noch nen banalen C-Cast draus.



  • Mach jetzt nur noch nen banalen C-Cast draus.

    Und wie geht diese, ich habe so was schon probiert, so wie ich im ersten Post geschrieben habe ?



  • 0123ancd schrieb:

    aussagekräftig

    Was immer gut ist. Außer für Frickler.

    0123ancd schrieb:

    Mach jetzt nur noch nen banalen C-Cast draus.

    Nein, ds hier ist die "C++" Sektion.



  • Nein, ds hier ist die "C++" Sektion.

    Aber interessieren würde es mich trotzdem.



  • Mathuas schrieb:

    Nein, ds hier ist die "C++" Sektion.

    Aber interessieren würde es mich trotzdem.

    http://lmgtfy.com/?q=c+cast+in+c%2B%2B



  • @TE: reinterpret_cast<> ist äquivalent zu einem C-Cast nur arschlang und in blau.



  • 0123ancd schrieb:

    @TE: reinterpret_cast<> ist äquivalent zu einem C-Cast nur arschlang und in blau.

    Falsch.
    zB. ist ein C-Cast auch gleich ein const_cast.





  • Typisches Trollverhalten.



  • Hi schrieb:

    Typisches Trollverhalten.

    *trollolololol*



  • Macht nix, ich sag immer es muss Dummköpfe geben, damit es auch die G'scheiten geben kann. So als Ausgleich 🙂


Log in to reply