Hallo, wie kann man in einer Schleife innerhalb einer Funktion eine Variable mit 3 Byte (var3b) um 1 Byte verschieben und ein neues Byte (var1b) hinzufügen, und im 2. Schritt ab einer variierenden Position ein Byte auslesen? (Jeder Buchstabe entspricht ein Bit 0 oder 1, Reihe mit gleichen Buchstaben entspricht 1 Byte und Daten sollen zwischen Funktionsaufruf nicht verloren gehen): Loop1: AAAAAAAABBBBBBBBCCCCCCCC (var3b - Anfangswert) BBBBBBBBCCCCCCCC.... (Verschiebung um 1 Byte) BBBBBBBBCCCCCCCCDDDDDDDD (var3b - hinzufügen von var1b) Auslesen ab Pos. (z.B.) 7 = BBCCCCCC Loop2: BBBBBBBBCCCCCCCCDDDDDDDD (var3b) CCCCCCCCDDDDDDDD.... (Verschiebung um 1 Byte) CCCCCCCCDDDDDDDDEEEEEEEE (var3b - hinzufügen von var1b) Auslesen ab Pos. (z.B.) 4 = CCCCCDDD Loop3: Funktionsaufruf: static char *var3b="XXX"; //Wert soll in Fkt. erhalten bleiben, //String Definition 3Byte char var1b, wert; //char Definition 1 Byte *var3b=(*var3b << 8); //Verschiebung der Var um 1 Byte *(var3b+2)=*var1b; //Hinzufügen des neuen Bytes an leere Pos. Beim Auslesen von var3b zeigt sich an dieser Stelle keine Änderung gegenüber des Ausgangswertes. wert=(* var3b >> 7); // Auslesen ab Pos. 7 = BBCCCCCC (Loop1) - in Ordnung ??? Vielen Dank im Voraus für jeden Tip. MFG Silvio
32-Bit-Variablen verwenden (DWORD). Shift-Operatoren und logische Operatoren (AND/OR) sollten das Problem lösen. Nehmen wir mal an, die Anfangswerte sind in einzelnen Byte-Variablen namens A, B, C und D enthalten (um kompatibel zu Deinem Bit-Beispiel zu bleiben). BYTE A; BYTE B; BYTE C; DWORD Variable; BYTE Ergebnis; // Startzustand herstellen Variable = (A << 16) | (B << 8) | C; // um 8 Bits verschieben Variable <<= 8; // Resultat extrahieren (Bits 13..20) Ergebnis = (Variable >> 13) & 0xFF; Klar?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.