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
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.
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.
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.
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.
- 1. In che modo Integer.parseInt (stringa) funziona effettivamente?
- 2. In che modo posso piegare una stringa in Python 2?
- 3. In che modo JavaScript [] funziona davvero?
- 4. In che modo NHibernate Projections.Max funziona con una tabella vuota?
- 5. In che modo InputStreamReader.close() funziona in modo interinale?
- 6. In che modo GDI + funziona così velocemente?
- 7. In che modo __call__ funziona davvero?
- 8. In che modo char [] rappresenta una stringa UTF-8?
- 9. In che modo input.nextInt() funziona esattamente?
- 10. In che modo LINQ funziona internamente?
- 11. Come dividere in modo affidabile una stringa in Python?
- 12. Come aggiungere un numero X di spazi in una stringa
- 13. In che modo SWIG avvolge una mappa <stringa, stringa> in Python?
- 14. In che modo funziona effettivamente Linux che blocca l'I/O?
- 15. In che modo mapA funziona con una freccia della funzione di flusso in Haskell?
- 16. In che modo eval() tratta un oggetto stringa in modo diverso da un valore stringa primitivo?
- 17. In che modo EqualityComparer <T> .Default funziona internamente?
- 18. In che modo LinkedList funziona internamente in Java?
- 19. Estrai X numero di parole che circondano una determinata stringa di ricerca all'interno di una stringa
- 20. Non è possibile convertire in modo implicito il tipo "X" in "stringa" - quando e in che modo decide che "non può"?
- 21. In che modo system() funziona esattamente in linux?
- 22. Che cos'è una stringa in stile Pascal?
- 23. Quale valore JavaScript dovresti assegnare a una variabile x in modo che typeof x = = = x sia vero?
- 24. In che modo IDataErrorInfo.this [string propertyName] funziona in C#?
- 25. In che modo funziona la convalida in ASP.NET MVC 2?
- 26. Come convertire un intero in una stringa in modo flessibile?
- 27. Trova tutte le coppie (x, y) in una matrice ordinata in modo che x + y <z
- 28. In che modo il mio LISP funziona come una variabile non associata?
- 29. Come scherzare in modo che `da x import *` funzioni
- 30. Esiste un modo per denigificare una stringa in C#?
E quando memorizza questa sequenza, archivia effettivamente i caratteri \ x? – Nosrettap
@Nosrettap: No, la traduzione viene eseguita in fase di compilazione. –
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