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

时间:2012-10-03 03:10:01

标签: c hex format-specifiers

C中是否有sprintf的格式说明符,将char映射到十六进制的方式与%xint映射到十六进制的方式相同?

2 个答案:

答案 0 :(得分:8)

是和否。

由于sprintf采用可变参数列表,因此所有参数在sprintf接收之前都会进行默认提升。这意味着sprintf 永远不会收到char - 在char收到int之前,sprintf始终会被提升为short(还有一个sprintf

是的,由于int收到的内容为%x,您可以使用char将其转换为十六进制格式,无论该值是否以“{1}”开头,它的工作方式都相同shortint%2.2xchar。如果(通常情况下)您希望为每个输入打印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