2012-04-07 11 views
5

Sto scrivendo un programma C/C++ che consiste nel mettere una rappresentazione esadecimale di un numero in una stringa e sono confuso su come funziona \x. Ho visto esempi in cui le persone hanno scritto cose come "\ xb2". In questo caso, come fa il programma a sapere se vuoi l'esagono di b seguito dal numero 2 o se vuoi l'esagono di b2? Inoltre, quando memorizza questo in memeory, salva i caratteri "\ x" o salva semplicemente la rappresentazione esadecimale?In che modo " x" funziona in una stringa?

risposta

6

Dalla serie C99 (6.4.4.4):

Ogni ottale o sequenza di escape esadecimale è la sequenza più lunga di caratteri che possono costituire la sequenza di escape.

+0

E quando memorizza questa sequenza, archivia effettivamente i caratteri \ x? – Nosrettap

+2

@Nosrettap: No, la traduzione viene eseguita in fase di compilazione. –

+0

So che questo ha quasi 6 anni, ma esiste un modo per sfuggire a quella sequenza esadecimale senza scrivere nulla sulla stringa ?? Dire che voglio avere una stringa con 255 'a' 'b' 'c'. Non riesco a scrivere "\ xffabc" e non riesco a scrivere "\ xff abc" perché sto aggiungendo un personaggio. – yakoudbz

3

Ad esempio, la stringa "123\x45" viene memorizzata in esadecimale come 31 32 33 45.

Come per la risposta di Oli, viene utilizzato il valore valido più lungo dopo '\ x'.

Il '\ x' non è memorizzato. Qualsiasi sequenza di escape non memorizza i caratteri che vedi sullo schermo, memorizza il vero carattere specificato. Ad esempio, '\ n' è in realtà memorizzato come carattere di avanzamento riga, 0x0A.

0

Quando si utilizza la sequenza di escape \ x all'interno di una stringa, i dati che seguono \ x sono effettivamente memorizzati nella sua rappresentazione binaria.

Così la stringa "ABC" è equivalente alla stringa "\ x414243"

Se si vuole emettere valori esadecimali nella forma di visualizzazione caratteri, ti consigliamo di utilizzare il formato X% xo% specificatore carattere:

printf("%X%X%X", 'A', 'B', 'C'); // emits "414243" 

Vedere la sezione 1.2.6 e la Sezione 1.2.7 della Guida C Library Reference

speranza che la spiegazione aiuta.

0

La traduzione viene eseguita in fase di compilazione in modo che ogni stringa venga inserita manualmente nel codice sorgente con \x e che finisca per essere il carattere che rappresenta nel file binario. Se si desidera eseguire questa operazione in fase di esecuzione, sarà necessario richiamare una funzione di analisi come strtol() utilizzando la base 16 che passa la stringa contenente l'esadecimale e la trasmette a un carattere.

Problemi correlati