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

C中十六进制字符的格式说明符,c,hex,format-specifiers,C,Hex,Format Specifiers,在C语言中,是否有一个sprintf格式说明符将char映射到hex,就像%x将int映射到hex一样?这是相同的%x。所有char值在传递到sprintf(或采用可变参数数的任何其他函数)之前都会转换为int 打印61是和否 由于sprintf接受一个可变参数列表,因此所有参数在sprintf接收它们之前都会进行默认升级。这意味着sprintf永远不会收到char——在sprintf收到char之前,char总是会被提升到int(短的也会) 是的,因为sprintf接收的是int,您可以使用%

在C语言中,是否有一个
sprintf
格式说明符将
char
映射到hex,就像
%x
int
映射到hex一样?

这是相同的
%x
。所有
char
值在传递到
sprintf
(或采用可变参数数的任何其他函数)之前都会转换为
int

打印
61

是和否

由于
sprintf
接受一个可变参数列表,因此所有参数在
sprintf
接收它们之前都会进行默认升级。这意味着
sprintf
永远不会收到
char
——在
sprintf
收到
char
之前,
char
总是会被提升到
int
(短的
也会)

是的,因为
sprintf
接收的是
int
,您可以使用
%x
将其转换为十六进制格式,并且无论该值是以
char
short
还是
int
开头,其工作原理都是一样的。如果(通常情况下)要为每个输入打印2个字符,可以使用
%2.2x


但是要注意一点:如果您的
char
是有符号的,并且您以负值开始,则升级到
int
将产生相同的数值,通常不会与原始char具有相同的位模式,因此(例如)如果
int
是16位,
ffffffff
如果int是32位,或者
ffffffffff
如果
int
是64位(假设有符号整数的典型2的补码表示),则值为
-1
的字符通常会打印为
ffffffffff

将字符映射为十六进制是什么意思?sprintf使用整数值格式化字符串,字符只是整数值,因此如果您指字符后面的十进制值的十六进制,那么只需使用
%x
@DanZimm,我想我只希望它显示1字节的十六进制,而不是4字节。
printf(%x\n),(char)0x90);
打印
ffffff 90
,当我希望它打印
90
时,我还希望
printf(%x\n,(char)1)
要打印
01
而不是
1
@Daniel使用
%02x
强制零填充两个字符输出。@Daniel将
0x90
转换为
无符号字符
将解决符号扩展问题。完美。这正是我想要的
printf("%x\n", 'a');