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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top