Simple compression reloaded++
A few minor notes (looks pretty good for the most part!):


Your most_significant_bit() function loop should be condensed into a for loop.  The main difference between the for's and the while's is a matter of pragmatics: we usually use for when there is a known number of iterations (which might not seem like the case here, but it's true), and use while constructs when the number of iterations in not known in advance.
I'm not a fan of you using -h as the command line argument equivalent to --hex.  Whenever I think of -h, I think of it as the shorthand of --help.  A better shorthand would be -x in my opinion.
Why do you do current_char_count += 1?  Why not current_char_count++/++current_char_count (both do the same thing in the same amount of time in this case)?