gcc doesn't have a facet for unsigned char, explictly use signed