memcopy



  • getData() liefert diese Variable zurück: uint8_t* data_;

    Stimmmt, das hätte ich gleich dazu schreiben müssen, sorry 😞



  • Hy

    Wie wärs denn damit:

    uint8_t binStates[9];
    memcpy(binStates , rep.getData(), 80);
    

    Da durch die Deklaration ja alle 10 Werte hintereinander liegen, kannst du sie auch alle auf einen Schwung kopieren und dann im nachhienein einfach auf die entsprechenden Wert mit dem Array index drauf zugreifen.

    Bzw bin mir zwar nicht genau sicher aber eigentlich sollte dies auch gehen: (nicht getestet)

    uint8_t *pInt;
    uint8_t MyVar;
    pInt = rep.getData();
    pInt++; // Zeiger auf den 2ten wert schieben
    MeinVar = (uint)(pInt);
    

    Mfg Deep



  • in ein array der größe 9 sollen ja angeblich weniger als 10 werte reinpassen. hab ich mal gehört.



  • the beholder schrieb:

    in ein array der größe 9 sollen ja angeblich weniger als 10 werte reinpassen. hab ich mal gehört.

    In ein Array der Grösse 9 passen genau 9 Elemente.. 🙄



  • drakon schrieb:

    In ein Array der Grösse 9 passen genau 9 Elemente.. 🙄

    es soll ja tatsächlich noch leute geben, die das nicht wissen.

    lotoreo schrieb:

    Ich müsste die Daten aus der Variable rep (die Größe ist genau 80) in 10 uint8_t kopieren [...]

    uint8_t binStates[9];
    

    Marc-O schrieb:

    uint8_t binStates[9];
    memcpy(binStates , rep.getData(), 80);
    


  • ^^

    Also an alle, die damit noch Mühe haben:

    Ein Array hat immer so viele Elemente, wie man bei der Deklaration (n) angibt, allerdings ist der Zugriff von 0 - (n-1). Also so:

    int a[10]; // 10 Elemente
    
    std::cout << a[0]; // erstes Element
    ...
    std::cout << a[9]; // 10tes und letztes Element
    

    So schwierig ist das ganze nicht..



  • Jap ihr habt ja so recht *schäm*

    Ist doof wenn man immer wieder zwischen den Programmiersprachen wechselt 😉 (VB/C#/C++)
    und dann auch noch den Code einfach kopiert ohne mit bischen Köpfen drüberschaut 🕶

    Natürlich gehört da ne 10 hin:

    Marc-O schrieb:

    ...

    uint8_t binStates[10]; // <-- hier war der fehler
    memcpy(binStates , rep.getData(), 80);
    

    ...

    Tschudligung 😞

    Mfg Marco



  • Das wird in anderen Sprachen nicht anders gehandhabt.. 🙄
    VB kenn ich persönlich nicht so genau, aber das wird auch nicht anders sein..



  • drakon schrieb:

    Das wird in anderen Sprachen nicht anders gehandhabt.. 🙄
    VB kenn ich persönlich nicht so genau, aber das wird auch nicht anders sein..

    Doch eben grad in VB schon 🙂 weil da gibt man mit:

    Dim arrVar(10) As String
    

    nicht die Anzahl sonder das höchste gewollte Element an. Die Anzahl hängt dann noch von "Option Base" ab, mit der man angibt ab welchen Index die automatischen Arrays anfangen. Wobei Standard ist in VB eine 1 also in diesem Beispiel gehts Array von 1 bis 10.
    (Bei mir setzt ich es aber immer auf 0 😉 Würde dann von 0 bis 10 => 11 Elemente bedeuten )

    Mfg Marco



  • Uff, jetzt schäme ich mich schon doppelt.. Dass ich das Array nicht richtig instanziert hab ist echt peinlich. Und wie einfach die Lösung ist, auch!

    Eine Frage habe ich aber trotzdem noch, bevor ich mich von hier mit einem ganz herzlichen "DANKE!" verabschiede:

    uint8_t binStates[9];
    memcpy(binStates , rep.getData(), 80);
    

    Würde das anders herum auch gehen? Also, dass ich meine binStates mit ihren Daten belade, und dann wieder über rep drüber schreib?

    Hm, für den Fall dass ich keine Antwort mehr krieg, auch jetzt schon: DANKE 🙂



  • drakon schrieb:

    Das wird in anderen Sprachen nicht anders gehandhabt.. 🙄
    VB kenn ich persönlich nicht so genau, aber das wird auch nicht anders sein..

    Ne, das ist völlig unterschiedlich. Einige Sprachen (i.d.R. interpretierte Sprachen) legen bei Zuweisung immer die passende Anzahl an Elementen an.


Anmelden zum Antworten