sprintf
在 C 中是否有一个格式说明符将 a 映射char
到十六进制,其方式与%x
将 an 映射int
到十六进制的方式相同?
问问题
23529 次
2 回答
9
是和不是。
由于sprintf
采用可变参数列表,因此所有参数在sprintf
接收它们之前都会经过默认提升。这意味着sprintf
将永远不会收到char
- a将始终在收到它之前char
被提升为(以及遗嘱)。int
sprintf
short
是的,由于sprintf
接收的是int
,您可以使用%x
它来将其转换为十六进制格式,并且无论该值以 、 还是 开头,它的工作方式char
都short
相同int
。如果(通常情况下)您想为每个输入打印 2 个字符,您可以使用%2.2x
.
但要注意一点:如果您char
已签名,并且您从负值开始,则提升int
将产生相同的数值,这通常不会与原始字符的位模式相同,因此(例如)一个字符如果是 16 位,如果 int 是 32 位,或者if是 64 位(假设有符号整数的典型 2 的补码表示),该值-1
通常会打印出来。ffff
int
ffffffff
ffffffffffffffff
int
于 2012-10-03T03:24:50.090 回答
7
那是一样的%x
。所有char
值int
在传递给sprintf
(或任何其他接受可变数量参数的函数)之前都会转换为。
printf("%x\n", 'a');
印刷61
于 2012-10-03T03:13:55.430 回答