Quelqu'un peut-il expliquer l'utilisation de la constante de caractère \ 000 et \ xhh, c'est-à-dire des nombres octaux et des nombres hexadécimaux dans une constante de caractère?Constante de caractères: 000 xhh
Répondre
En C, les chaînes sont terminées par un caractère avec la valeur zéro (0). Cela pourrait être écrit comme ceci:
char zero = 0;
mais cela ne fonctionne pas dans les chaînes. Il y a une syntaxe spéciale utilisée dans les littéraux de chaîne, où la barre oblique inversée fonctionne comme une introduction de séquence d'échappement, et est suivie de diverses choses. Une telle séquence est "backslash zero", qui signifie simplement un caractère avec la valeur zéro. Ainsi, vous pouvez écrire des choses comme ceci:
char hard[] = "this\0has embedded\0zero\0characters";
Une autre séquence utilise une barre oblique inverse suivie par la lettre 'x'
et un ou deux chiffres hexadécimaux, pour représenter le caractère avec le code indiqué. En utilisant cette syntaxe, vous pouvez écrire l'octet zéro comme '\x0'
par exemple.
EDIT: En relisant la question, il existe également un support pour de telles constantes en base huit, c'est-à-dire en octal. Ils utilisent une barre oblique inverse suivie du chiffre zéro, tout comme des constantes entières littérales octales. '\00'
est donc un synonyme de '\0'
.
Cela est parfois utile lorsque vous devez construire une chaîne contenant des caractères non imprimables ou des caractères de contrôle spéciaux.
Il existe également un ensemble de caractères spéciaux «nommés» à un caractère, tels que '\n'
pour le retour à la ligne, '\t'
pour la TAB, etc.
Octal est base 8 (en utilisant les chiffres 0-7) de sorte que chaque chiffre est 3 bits:
\ 0354 = 11 101 100
hexadécimal est base 16 (en utilisant les chiffres 0-9, AF) et chaque chiffre est de 4 bits:
\ x23 = 0.010 0.011
chaînes intérieur C (tableaux de caractères/pointeurs), ils sont généralement utilisés pour coder les octets qui ne peut pas être facilement représentés.
Donc, si vous voulez une chaîne qui utilise des codes ASCII comme STX et ETX, vous pouvez faire:
char *msg = "\x02Here's my message\x03";
Celles-ci seraient utilisées pour écrire des caractères autrement non imprimables dans l'éditeur. Pour les caractères standard, ce sont les différents caractères de contrôle, car wchar pourrait être des caractères non représentés dans la police de l'éditeur.
Par exemple, cette compile dans Visual Studio 2005:
const wchar_t bom = L'\xfffe'; /* Unicode byte-order marker */
const wchar_t hamza = L'\x0621'; /* Arabic Letter Hamza */
const char start_of_text = '\002'; /* Start-of-text */
const char end_of_text = '\003'; /* End-of-text */
Edit: En utilisant octal littéraux a une mise en garde intéressante. Les nombres octaux ne peuvent apparemment pas avoir plus de trois chiffres, ce qui restreint artificiellement les caractères que nous pouvons entrer.
Par exemple:
/* Letter schwa; capital unicode code point 0x018f (octal 0617)
* small unicode code point 0x0259 (octal 1131)
*/
const wchar_t Schwa2 = L'\x18f'; /* capital letter Schwa, correct */
const wchar_t Schwa1 = L'\617'; /* capital letter Schwa, correct */
const wchar_t schwa1 = L'\x259'; /* small letter schwa, correct */
const wchar_t schwa2 = L'\1131'; /* letter K (octal 113), incorrect */
- 1. hôte virtuel apache 000-default
- 2. ArcGIS: Les étiquettes ne sont affichées qu'à l'échelle de 10 000 000
- 3. `const_missing ': constante initialisés (NameError)
- 4. C++ constante/literal
- 5. Pourquoi spécifier une constante définie dans une constante de classe en lançant une erreur?
- 6. Valeur de la constante Bad Compile
- 7. Ligne de latitude constante dans Matlab
- 8. C++ Expression constante et limites de tableau
- 9. Android RadioButton retourner une constante?
- 10. Valeur constante dans l'expression conditionnelle
- 11. erreur constante étrange initialisés (Rails)
- 12. Constante Ruby non initialisée NameError
- 13. Codage de caractères pour les caractères thaïs
- 14. Constante non initialisée Test :: Unit :: TestResult :: TestResultFailureSupport
- 15. Autorisez attribut en utilisant une expression constante
- 16. Constante de numéro de ligne dans Actionscript 3.0?
- 17. LINQ to SQL - Sélectionner une valeur constante
- 18. C# WinForms DataGridView - Ligne constante sélectionnée!
- 19. Constante non initialisée MyClass (NameError) dans Ruby
- 20. : symbole à constante dans les rails
- 21. "ActiveRecord constante uninitialized" sur la migration
- 22. Où puis-je trouver des constantes de caractères en C#?
- 23. Problème de stockage de plus de 64 000 dans la colonne mysql mediumtext
- 24. Erreur Visual C++ C2143: erreur de syntaxe: manquant ')' avant 'constante'
- 25. C# Constante de couleur Valeurs R, G, B
- 26. Comment déclarer une constante de caractère large dans un IDL
- 27. RegEx pour exclure une constante de chaîne spécifique
- 28. Allocation dynamique de la mémoire constante dans CUDA
- 29. Constante de compilation conditionnelle au niveau du projet
- 30. Questions concaténer à une constante de tableau pour options_for_select
si vous voulez écrire "ce \ 0has \ 00 caractères"? Est-ce que \ 00 serait interprété comme un octet '\ 0' ou comme '\ 0', '0'? Quelle est la limite de la longueur d'une séquence d'échappement octale? – strager
@strager, ne le connais pas, mais vous pouvez utiliser <"this \ 0has \ 0" "0 chars"> car C les fera fonctionner ensemble. – paxdiablo
mais c lira seulement ceci à partir de <"this \ 0has \ 00 chars">, car il obtiendra la valeur nulle \ 0 qui est la condition de test pour la fin de n'importe quelle chaîne. Qu'entendez-vous par "vous pouvez écrire zéro octet comme '\ x0'"? merci pour la réponse! – mawia