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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top