题
是否有格式说明符 sprintf
在 C 中映射 a char
以同样的方式转换为十六进制 %x
地图 int
十六进制?
解决方案
是和不是。
自从 sprintf
接受一个可变参数列表,所有参数在之前都经过默认提升 sprintf
接收它们。这意味着 sprintf
将要 绝不 收到一个 char
- A char
将永远晋升为 int
前 sprintf
收到它(和一个 short
也会)。
是的,从什么时候起 sprintf
正在接收将是 int
, , 您可以使用 %x
将其转换为十六进制格式,无论该值是否以 char
, short
, , 或者 int
. 。如果(通常是这种情况)您想为每个输入打印 2 个字符,您可以使用 %2.2x
.
但要注意一点:如果你的 char
是有符号的,并且你从一个负值开始,提升到 int
将产生相同的数值,通常 惯于 与原始字符具有相同的位模式,因此(例如)具有以下值的字符 -1
通常会打印为 ffff
如果 int
是16位, ffffffff
如果 int 是 32 位,或者 ffffffffffffffff
如果 int
是 64 位(假设有符号整数的典型 2 补码表示)。
其他提示
那是一样的 %x
. 。全部 char
值转换为 int
在传递给之前 sprintf
(或任何其他采用可变数量参数的函数)。
printf("%x\n", 'a');
印刷 61
不隶属于 StackOverflow