Länge dynamisch machen



  • Hallo C++ Gemeinde!

    Ich habe eine Frage zu folgender Funktion:

    bool Daten(uchar* & empfpuffer, ulong neudaten, ulong bufferleng, int & errorcode){
    uchar* ptr = empfpuffer;
    
    /* hier die Frage: wie kann ich prüfen das die Länge ausreichend ist?*/  
    
    /* hier die Frage: die schon dynamische Länge durch eine Längenfunktion ersetzen. Es soll auch noch geprüft werden, ob wirklich im unteren Nibble die Länge steht */
    
    Data* dataChannel = new Data(*pData);
    
    uchar ValueLen = ptr[2] & 0x0F;
    dataChannel->Value = ValueLong(empfpuffer+3, ValueLen);
    
    }
    

    Ich hoofe ihr könnt mir weiterhelfen?


  • Mod

    Was soll das werden? Was ist die Länge von empfpuffer? bufferleng? Was ist eine ausreichende Länge? Was soll die Aktion mit dataChannel, bei dem du ein Objekt auf den Heap legst, es änderst und dann den Zeiger da drauf wegschmeißt?



  • Schau dir mal bitte im Einsteigerbuch deiner Wahl das Kapitel über Container an (Speziell std::vector). Damit sollten deine Probleme mit dynamischen Längen erledigt sein. (Die Probleme mit der Sinnhaftigkeit des Codes, die Sepp schon angemerkt hat, natürlich nicht unbedingt).



  • Hallo! empfpuffer ist ein 46Byte großer Datenstrom (--> bestehend aus Hex). bufferleng hat die groöße von empfpuffer also 46byte.



  • Ich weiss das der Code keinen Sinn macht(hab euch nicht den gesamten Code gesendet), es geht mir nur ums prinzip, wie ich mit den gegeben eingangsgrößen dies lösen könnte.


  • Mod

    😕 Nun, dann musst du wohl klären, ob 46 groß genug ist oder nicht. Fragt sich halt wofür. Wie pumuckl schon gesagt hat: Lies dir mal den Sticky-Thread durch, deine Frage ist viel zu unklar, um sie zu beantworten.



  • int main(int argc, char *argv[])
    {
            /*hier nur 10byte groß*/
            unsigned char buffer[] = {0x11, 0x2E, 0xAA, 0x23, 0x45, 0x23, 0x01, 0x01, 0x12,   0x22}
    
            unsigned long buffersize = sizeof(buffer);
    	unsigned char* Receiveb = &buffer[0];
            int err = 0;
    
    	Handler::Daten(uchar* buffer& , ulong buffersize, ulong buffersize, int & err);
    
    	/*nicht vollständiger Code*/
    }
    

    Vllt. könnt ihr mit der main mehr anfangen.


  • Mod

    Ich kapier's immer noch nicht. Jetzt hast du doch buffersize 10 mit übergeben. Das kannst du doch prüfen, ob es größer oder kleiner als 46 ist. Wenn du jetzt aber noch mal so eine unklare Frage stellst wo du einfach nur Code hinklatscht, dann antworte ich aber nicht mehr.


Anmelden zum Antworten