C中是否有sprintf
的格式说明符,将char
映射到十六进制的方式与%x
将int
映射到十六进制的方式相同?
答案 0 :(得分:8)
是和否。
由于sprintf
采用可变参数列表,因此所有参数在sprintf
接收之前都会进行默认提升。这意味着sprintf
永远不会收到char
- 在char
收到int
之前,sprintf
始终会被提升为short
(还有一个sprintf
。
是的,由于int
收到的内容为%x
,您可以使用char
将其转换为十六进制格式,无论该值是否以“{1}”开头,它的工作方式都相同short
,int
或%2.2x
。char
。如果(通常情况下)您希望为每个输入打印2个字符,则可以使用int
。
请注意一点:如果您的-1
已签名,并且您以负值开头,则ffff
的促销将产生相同的数值,通常不会< / em>与原始char相同的位模式,因此(例如)如果int
为16位,则ffffffff
的值通常会打印为ffffffffffffffff
int
{{1}} 1}}如果int是32位,或{{1}}如果{{1}}是64位(假设有符号整数的典型2的补码表示)。
答案 1 :(得分:7)
那是%x
。在传递给char
(或任何其他带有可变数量参数的函数)之前,所有int
值都会转换为sprintf
。
printf("%x\n", 'a');
打印61