printf格式化的一个疑问,该怎么处理

printf格式化的一个疑问
下面这段代码,我在格式话字串中用了%01x,这个是打印一个16进制数,最多一位是么?(我的说法错在哪里)
C/C++ code

int main(int argc, char* const argv[]) {
    char n = 0x80;
    printf("%01x\n", (unsigned char)n);
    return 0;
}



但是实际打印了80

我把格式化字串改成了%0x\n,结果还是不变。

我的目的是想控制打印数字的个数,例如只打印这个数的16进制的一位。我该怎么改代码呢?

------解决方案--------------------
%0mx

多于m位时,按照实际位数显示

少于m位时,补0