Shift Buffer



  • Hallo, folgender buffer

    BYTE  abBuffer[150];
    

    muss um einen bestimmten Wert nach links geshiftet werden. Habe es so probiert ..

    // shift abBuffer um len nach links
    	for (i=0; i<150-len; i++){
    		buf[i]=buf[i+len];
    		}
    

    funktioniert aber nicht! Folgende Fehlermeldung wird ausgespuckt:

    error C2166: L-Wert gibt ein konstantes Objekt an

    Kann mir da jemand helfen?

    Gruß
    daMike



  • wie sieht denn 'buf' aus?



  • Du definierst dein Array als "abBuffer" und dann rechnest du mit einer Variablen "buf" - wie werden die beiden einander zugeordnet? (und welchen Typ hat "buf"?)



  • sorry, abBuffer und buf sind identisch! Der Datentype ist BYTE!



  • Was meinst du mit "identisch"? (ein bisschen mehr Code wäre hilfreich)

    Und der Fehlercode lässt vermuten, daß buf ein "const BYTE*" oder "const BYTE[]" sein dürfte. Also solltest du mal ein minimales compilierbares Beispiel angeben, an dem sich der Fehler rekonstruieren lässt.



  • sorry, aber der code ist ziemlich verstreut; BYTE müsste unsigned char const* sein; abBuffer wird im MAIN benützt und an ein Funktion übergeben, welche

    unsigned char const* buf
    

    draus macht; anbei noch der Code von der Funktion:

    /*---------------------------------------------------------------------------------------*/
    CString ShiftabBuffer (unsigned char const* buf, unsigned int len){
    
    	//Variablen
    	int i,k,j;
    	CString RxD_Daten;
    	CString IDbuf[10];
    
    	RxD_Daten =  buf;
    
    	// Verleichsheader
    	IDbuf[0]="RD0";
    	IDbuf[1]="VE0";
    	IDbuf[2]="SS0";
    	IDbuf[3]="SI0";
    	IDbuf[4]="DP0";
    
    	j = RxD_Daten.GetLength();
    
    	// shift RxD_Daten um len nach links
    	for (i=0; i<j-len; i++){
    		RxD_Daten = RxD_Daten.Right(j-len);
    		}
    
    	// suche nach weiterer Message
    	k = 0;
    	for (i=0; i<5; i++){
    		k = RxD_Daten.Find(IDbuf[i]);
    		RxD_Daten = RxD_Daten.Right(150-len-k);
    		}	
    return RxD_Daten; 
    }
    


  • daMike schrieb:

    welche

    unsigned char const* buf
    

    draus macht;

    Und da ist das const zu viel, wenn du den übergebenen Buffer ändern willst.

    // shift RxD_Daten um len nach links
    for (i=0; i<j-len; i++){
    	RxD_Daten = RxD_Daten.Right(j-len);
    }
    

    An der Stelle reicht schon der einzelne Befehl "RxD_Daten = RxD_Daten.Right(j-len);" aus, um die ersten 'len' Zeichen des Strings abzuschneiden - wenn du das j-len mal machst, bleibt vermutlich nicht viel von deinem String übrig.


Anmelden zum Antworten