是否有格式说明符 sprintf 在 C 中映射 a char 以同样的方式转换为十六进制 %x 地图 int 十六进制?

有帮助吗?

解决方案

是和不是。

自从 sprintf 接受一个可变参数列表,所有参数在之前都经过默认提升 sprintf 接收它们。这意味着 sprintf 将要 绝不 收到一个 char - A char 将永远晋升为 intsprintf 收到它(和一个 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top