C中十六进制字符的格式说明符

Dan*_*iel 3 c hex format-specifiers

sprintf在C中是否有一个格式说明符,它将a映射char到十六进制的方式与%x映射int到十六进制的方式相同?

Jer*_*fin 9

是的,不是.

由于sprintf采用可变参数列表,所有参数在sprintf接收之前都会进行默认提升.这意味着sprintf永远不会接受char-一个char总是被晋升为intsprintf接受它(和short意志为好).

是的,因为什么sprintf被接受将是一个int,你可以用%x它转换为十六进制格式,它会工作的价值是否开始作为一个相同的char,shortint.如果(通常情况下)你想为每个输入打印2个字符,你可以使用%2.2x.

虽然当心一点:如果你char的签名,你开始为负值,促进以int将产生相同的数值,通常不会是相同的位模式作为原始字符,所以(例如)的烧焦如果int是32位,或者如果是64位(假设有符号整数的典型2的补码表示),则该值-1通常会打印出来,ffff好像int是16位.ffffffffffffffffffffffffint


das*_*ght 7

那是一样的%x.所有charint在传递给sprintf(或任何其他采用可变数量参数的函数)之前都会转换为.

printf("%x\n", 'a');
Run Code Online (Sandbox Code Playgroud)

版画 61

  • @Daniel将`0x90`转换为`unsigned char`而不是`char`将修复符号扩展问题. (3认同)