Especificador de formato hex char em C
-
12-12-2019 - |
Pergunta
Há um especificador de formato para sprintf
em C que mapeia um char
para hex, da mesma forma que %x
mapeia um int
para hex?
Solução
Sim e não.
Desde sprintf
leva uma variável de lista de argumento, todos os argumentos passam por padrão promoção antes de sprintf
recebe-los.O que significa sprintf
vai nunca receber um char
-- um char
sempre vai ser promovido para int
antes de sprintf
recebe (e um short
vai bem).
Sim, desde que sprintf
está a receber vai ser um int
, você pode usar %x
para converter para o formato hexadecimal, e ele vai trabalhar o mesmo se esse valor começou como um char
, short
, ou int
.Se (como é frequentemente o caso) que você deseja imprimir 2 caracteres para cada entrada, você pode usar %2.2x
.
Cuidado com um ponto que:se o seu char
é assinado, e você começa com um valor negativo, a promoção de int
irá produzir o mesmo valor numérico, que normalmente não ser o mesmo padrão de bits como o original char, de modo que (por exemplo) um char com o valor -1
normalmente imprimir como ffff
se int
é de 16 bits, ffffffff
se int de 32 bits, ou ffffffffffffffff
se int
é de 64 bits (supondo que o típico 2 complemento representação para números inteiros assinados).
Outras dicas
Que o mesmo %x
.Todos char
os valores são convertidos para int
antes de ser passado para sprintf
(ou qualquer outra função que recebe um número variável de parâmetros).
printf("%x\n", 'a');
impressões 61