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* bufdraus 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* bufdraus 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.