Especificador de formato hex char en C
-
12-12-2019 - |
Pregunta
Hay un especificador de formato para sprintf
en C que se asigna una char
a hex de la misma manera que %x
los mapas de un int
a hexadecimal?
Solución
Sí y no.
Desde sprintf
toma una lista de argumentos variable, todos los argumentos se someten a defecto de la promoción antes de sprintf
los recibe.Que significa sprintf
se nunca recibir un char
-- un char
siempre será promovido a int
antes de sprintf
recibe (y un short
será así).
Sí, ya lo sprintf
está recibiendo será un int
, usted puede utilizar %x
para convertirlo a formato hexadecimal, y va a funcionar de la misma, independientemente de que el valor que empezó como un char
, short
, o int
.Si (como es a menudo el caso) que desea imprimir 2 caracteres para cada entrada, puede utilizar %2.2x
.
Tenga cuidado con un punto, sin embargo:si su char
está firmado, y que comience con un valor negativo, la promoción de int
va a producir el mismo valor numérico, que normalmente no ser el mismo patrón de bits como el original char, así que (por ejemplo) un char con el valor -1
normalmente imprimir ffff
si int
es de 16 bits, ffffffff
si int es de 32 bits, o ffffffffffffffff
si int
es de 64 bits (suponiendo que el típico complemento a 2 representación de enteros).
Otros consejos
Esa es la misma %x
.Todos char
los valores se convierten a int
antes de ser pasados a sprintf
(o cualquier otra función que toma la variable número de parámetros).
printf("%x\n", 'a');
imprime 61