Dan*_*iel 3 c hex format-specifiers
sprintf在C中是否有一个格式说明符,它将a映射char到十六进制的方式与%x映射int到十六进制的方式相同?
是的,不是.
由于sprintf采用可变参数列表,所有参数在sprintf接收之前都会进行默认提升.这意味着sprintf将永远不会接受char-一个char总是被晋升为int前sprintf接受它(和short意志为好).
是的,因为什么sprintf被接受将是一个int,你可以用%x它转换为十六进制格式,它会工作的价值是否开始作为一个相同的char,short或int.如果(通常情况下)你想为每个输入打印2个字符,你可以使用%2.2x.
虽然当心一点:如果你char的签名,你开始为负值,促进以int将产生相同的数值,通常不会是相同的位模式作为原始字符,所以(例如)的烧焦如果int是32位,或者如果是64位(假设有符号整数的典型2的补码表示),则该值-1通常会打印出来,ffff好像int是16位.ffffffffffffffffffffffffint
那是一样的%x.所有char值int在传递给sprintf(或任何其他采用可变数量参数的函数)之前都会转换为.
printf("%x\n", 'a');
Run Code Online (Sandbox Code Playgroud)
版画 61