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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top