Hallo,
ich würde gerne möglichst effizient CAN Nachrichten auswerten. Diese
bestehen immer aus 1..8 zusammenhängenden Bytes. Beispielsweise kann ein
Signal bei bit 2 starten und 10bit lang sein. Ich wollte nun
schrittweise immer zwei Byte (damit maximal 16Bit breite Worte) mit
einem Short-Zeiger auswählen und dann mit entsprechender Maskierung
verUNDen. Leider lässte der kompiler die conversion von char* zu short
int* nicht zu.
Folgendes wollte ich also tun:
short * block;
char msg[]="ABCDEFG";
/*lenght soll die länge meine wortes in bit angeben, starbit ist
selbsterklärend*/
block = &msg; // also damit sollte der short auf das untere Byte zeigen
block = block & ((short)(pow(2,length) << startbit));
nun sollte eigentlich meine nachrichtig fertig maskiert in block stehen,
sodass ich diese nur wieder um startbit in die gegenrichtung shiften
müsste.
gibt es vielleicht eine elegantere lösung, um aus einem 2er Byteblock
einen beliebig langen (max16) bitblock zu lesen?
grüße und danke für ideen,
toby