Hallo.
Wenn man sich byte und byte2 in Hex-Schreibweise anschaut,
kann man die Dezimalzahl auch direkt ablesen:
byte = 224 = E 0 16
byte2 = 17 = 11 16
Die Dezimalzahl wäre also 011.
Könnte ich dann nicht einfach sagen
tmpL=100*LowByte(byte)+10*HighByte(byte2)+LowByte(byte2)
Wenn LowByte(x) dir den Wert der niederwertigen 4 Bits von x liefert und HighByte(x) den Wert der höherwertigen 4 Bits, dann ginge das.
Genaugenommen sollte man die Funktionen dann LowNibble und HighNibble nennen. Ein Nibble ist die Hälfte eines Bytes.
Man könnte den gegebenen Ausdruck
tmpL = 100 \* (byte & 0x0F);
tmpL = tmpL + (10 \* (byte2 \>\> 4)) + (byte2 & 0x0F);
auch als einzelne Zuweisung schreiben. Das sähe dann so aus:
tmpL = 100 \* (byte & 0x0F) + 10 \* (byte2 \>\> 4) + (byte2 & 0x0F);
Deine Funktion LowByte(x) müsste also (x & 0x0F) ermitteln und HighByte(x) eben (x >> 4).
Die Erklärung dahinter ist, dass das bitweise Ver-und-en mit 0x0F die höherwertigen 4 Bits auf 0 setzt und somit die niederwertigen 4 Bits übrigbleiben.
Für die höherwertigen Bits kann man das nicht genauso machen. Man kann zwar die niederwertigen Bits ausmaskieren durch Ver-und-en mit 0xF0, aber dann hat man da noch den Faktor 24 drin. Den Faktor bekommt man weg durch das Verschieben um 4 Bits. Da dabei aber eh die niederwertigen 4 Bits verschwinden, kann man auch direkt Schieben, ohne erst die Bits auf 0 zu setzen.
Sebastian.