A pain to write, and my google-fu was not strong enough to find someone who’d done it for me.
The class allows you to encode / decode 4, 9 or 17 bit (for example) integers to and from a byte. I needed it to store some binary keys in a database that are made up of multiple keys, in my case the difference between a byte storing 9 bit integers and one storing 16/32 bit integers would be very costly. If you are doing something similar in MSSQL watch out for 0 byte right truncation (reserve the value of 0 perhaps). This version of the code supports 1 though 31 bit unsigned integers, it could easily be extended beyond this if needed.
Code available here on code project (click on tips).