Hallo
Vielleich hat jemand von euch eine Idee oder Hinweis.
Ich bekomme aus eine Microcontroller Datenpakete. Diese liegen zwischen 1 und 4 Bytes. Aus diesen soll ab einen Startbit (BitOffset) auf eine Länge (BitSize) Daten herausgeschnitten werden.
Beispiel (Bytes=2, BitOffset=4,BitSize=4)
00110010 01011011 -> 0010
Mein bisheriger Code
1. Ein Array wird an *bp übergeben.
2. Aus BitOffset und BitSize die notwendige Länge der Bytes welche verwendet wird (BUG)
3. memcpy kopiert alles in eine ulong
4. Bitverschiebung mit Basis 32 da es sich um eine Long handelt.
Das ganze klappt so nicht, wer hat eine Tipp für mich wie es richtig funktioniert (oder eine Quellcode) - vielleicht denke ich zu umständlich.
vielen Dank im Voraus.
Vielleich hat jemand von euch eine Idee oder Hinweis.
Ich bekomme aus eine Microcontroller Datenpakete. Diese liegen zwischen 1 und 4 Bytes. Aus diesen soll ab einen Startbit (BitOffset) auf eine Länge (BitSize) Daten herausgeschnitten werden.
Beispiel (Bytes=2, BitOffset=4,BitSize=4)
00110010 01011011 -> 0010
Mein bisheriger Code
Code:
unsigned long ByteToLong( byte const *bp, byte BitOffset, byte BitSize) { //**** Ermittelt Anzahl der Byte auf Basis des Startbits und der Laenge der Bitstring byte c=((BitOffset+BitSize)/8); (c) - (int)(c) > 0.0 ? (int)(c) + 1 : c; //**** Init Long unsigned long value = 0; //**** Kopiert Byts in Long memcpy( &value, bp, c ); //**** Bitverschiebung value<<=32-(BitOffset+BitSize); value>>=32-BitSize; return(value); }
1. Ein Array wird an *bp übergeben.
2. Aus BitOffset und BitSize die notwendige Länge der Bytes welche verwendet wird (BUG)
3. memcpy kopiert alles in eine ulong
4. Bitverschiebung mit Basis 32 da es sich um eine Long handelt.
Das ganze klappt so nicht, wer hat eine Tipp für mich wie es richtig funktioniert (oder eine Quellcode) - vielleicht denke ich zu umständlich.
vielen Dank im Voraus.
Comment