Formato specificatore per Hex Char in C
-
12-12-2019 - |
Domanda
Esiste un specificatore di formato per sprintf
in C che mappa un char
a esagono nello stesso modo in cui %x
Maps A int
to Hex?
Soluzione
Sì e no.
Poiché sprintf
prende un'elenco di argomenti variabili, tutti gli argomenti sottoposti a promozione predefinita prima che sprintf
li riceve. Ciò significa sprintf
mai riceve un char
: un char
verrà sempre promosso a int
prima che sprintf
lo riceve (e un short
).
Sì, dal momento che il sprintf
sta ricevendo sarà un int
, è possibile utilizzare %x
per convertirlo in formato esadecimale e funzionerà allo stesso modo in cui tale valore avviato come char
, short
o int
. Se (come è spesso il caso) che si desidera stampare 2 caratteri per ciascun ingresso, è possibile utilizzare %2.2x
.
Aspirate però: Se il tuo char
è firmato, e si avvia con un valore negativo, la promozione a int
produrrà lo stesso valore numerico, che normalmente non è lo stesso modello di bit Come il char originale, quindi (ad esempio) un char con il valore -1
stampa normalmente come ffff
se int
è di 16 bit, ffffffff
se int è 32 bit o ffffffffffffffff
se int
è di 64 bit (assumendo la rappresentazione del complemento di 2 tipiche per I numeri interi firmati).
Altri suggerimenti
è lo stesso %x
.Tutti i valori di char
vengono convertiti in int
prima di passare a sprintf
(o qualsiasi altra funzione che accetta il numero variabile di parametri).
printf("%x\n", 'a');
.
Stampe 61