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
byte test01[4]={0x30,0x33,0x22,0x11};
Serial.println(ByteToLong(test01,1,8),BIN);
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);
}
- Ein Array wird an *bp übergeben.
- Aus BitOffset und BitSize die notwendige Länge der Bytes welche verwendet wird (BUG)
- memcpy kopiert alles in eine ulong
- 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.