mikrocontroller.net

Forum: PC-Programmierung Byte Verschiebung


Autor: silvio hartlaub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du die Bytes nicht einfach kopieren?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.