C - printf()说明符的可互换性[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

有没有理由选择

printf("%hhx", foo);

过度

printf("%x", foo);

这里foo是一个unsigned char。我已经进行了一些测试,看起来它们可以互换,是不是真的如此?如果是这样,在考虑到便携性时应该使用哪一个?

c
1个回答
4
投票

unsigned char foo的具体情况中,没有区别。如果您尝试过:

#include <stdio.h>

int main(void)
{
      signed char bar = '\xFF';
    unsigned char foo = '\xFF';
    printf("%hhx %x\n", bar, bar);
    printf("%hhx %x\n", foo, foo);
    return 0;
}

你通常得到输出:

ff ffffffff
ff ff

原因是在两种情况下,当字符传递给int时,字符将转换为printf(),但有符号的字符将转换为负int,然后当长度修饰符为unsigned char时将其转换为hh并保留当省略长度修饰符时,全尺寸(4个字节,我假设)。

© www.soinside.com 2019 - 2024. All rights reserved.