I can, this forum post explains it better than I could though. Essentially you are correct as there is a whole host of things going on when you try to bit shift something. E.g. with R5 = B11111, you expect R8 to be B11111111 (which is the result of the magic calculation), not B11111000 (which is the result of left shift by 3).
And yes, your method does appear to work however there exists some corruption and the file size increases massively - not sure exactly why.
Thanks again for your help!