Waves sind in Intel Order (schon mal Windows auf 'nem Mac gesehen? ;)).
Du hast es immer noch nicht so ganz mit Motorola und Intel Order raus.
Wenn im Wave steht 1F 2F 3F 4F, steht bei intel 0x4F3F2F1F und bei big endian 0x1F2F3F4F (also wenn man Daten in char *buf hätte und einfach int i=*(int*)buf machen würde). Denmach würde and mit 0x000FFFFF die falsche Operation bei intel order sein, wenn man die nierderwertigen bits löschen möchte, weil man dann 0x000F2F1F bekäme. Man muß mit 0xFFFFF000 "and"en und dann shiften (EDIT:nein kann auch nicht stimmen, s.u.). Ich denke aber das sign könnte noch Probleme machen.
Ach, ich habe mal im meine Routine geguckt bei 24bit int shifte ich einfach um 8 nach rechts und dann wieder zurück nach links. Dann wird sign korrekt mitgeschleppt. (Sonst, wenn du das byte löschen willst per AND, mußt du dann das sign bit extrahiern und sign extension mache - aua.) Ich nehme an bei 20bit machst du (x<<8)>>12.