support signed/unsigned char properly