C中十六进制字符的格式说明符
在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,您可以使用%
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');