Credo che l'unico errore nel codice che hai postato sia che mentre nel tuo esempio dici di dover shiftare a destra i bytes di 4 posizioni, qui li shifti di 8; correggi così:
codice:
new_byte = new_byte >> 4;
.