Constantes Caractère

Les caractères comme éléments d'une chaîne de caractères en MQL5 sont des indices dans un ensemble de caractères Unicode. Ce sont des valeurs hexadécimales qui peuvent être converties en entiers, et qui peuvent être manipulées par des opérations telles que l'addition et la soustraction.

Tout caractère entre guillemets ou code ASCII hexadécimal d'un caractère comme '\x10' est une constante de caractère et est de type ushort. Par exemple, '0' est la valeur numérique 30, qui correspond à l'indice de zéro dans la table des caractères.

Exemple :

void OnStart()
  {
//--- définit les constantes des caractères
   int symbol_0='0';
   int symbol_9=symbol_0+9; // récupère le symbole '9'
//--- affiche les valeurs des constantes
   printf("Sous forme décimale : symbol_0 = %d,  symbol_9 = %d",symbol_0,symbol_9);
   printf("Sous forme hexadécimale : symbol_0 = 0x%x,  symbol_9 = 0x%x",symbol_0,symbol_9);
//--- entre les constantes dans une chaîne
   string test=""
   StringSetCharacter(test,0,symbol_0);
   StringSetCharacter(test,1,symbol_9);
//--- voici à quoi elles ressemblent dans une chaîne de caractères
   Print(test);
  }

Le backslash est un caractère de contrôle pour le compilateur lors de l'utilisation de chaînes constantes et de caractères constants dans le texte source d'un programme. Certains symboles, par exemple le guillemet simple ('), le guillemet double ("), le backslash (\) et les caractères de contrôle peuvent être représentés comme une combinaison de symboles commencant avec un backslash (\), selon le tableau ci-dessous :

Nom du caractère

Code mnémonique ou image

Valeur en MQL5

Valeur numérique

nouvelle ligne (line feed)

LF

'\n'

10

tabulation horizontale  

HT

'\t'

9

retour chariot

CR

'\r'

13

backslash

\

'\\'

92

guillemet simple  

'

'\''

39

double guillemet  

"

'\"'

34

code hexadecimal

hhhh

'\xhhhh'

de 1 à 4 caractères hexadécimaux

code décimal

d

'\d'

nombre décimal de 0 à 65535

Si un backslash est suivi d'un caractère autre que ceux décrits ci-dessus, le résultat est indéfini.

Exemple

void OnStart()
  {
//--- déclare les constantes de caractères
   int a='A';
   int b='$';
   int c='©';      // code 0xA9
   int d='\xAE';   // code du symbole ®
//--- affiche les constantes
   Print(a,b,c,d);
//--- ajoute un caractère à la chaîne de caractères
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- remplace un caractère dans une chaîne
   StringSetCharacter(test,0,b);
   Print(test);
//--- remplace un caractère dans une chaîne
   StringSetCharacter(test,0,c);
   Print(test);
//--- remplace un caractère dans une chaîne
   StringSetCharacter(test,0,d);
   Print(test);
//--- représente les caractères sous forme de nombre
   int a1=65;
   int b1=36;
   int c1=169;
   int d1=174;
//--- ajoute un caractère à la chaîne de caractères
   StringSetCharacter(test,1,a1);
   Print(test);
//--- ajoute un caractère à la chaîne de caractères
   StringSetCharacter(test,1,b1);
   Print(test);
//--- ajoute un caractère à la chaîne de caractères
   StringSetCharacter(test,1,c1);
   Print(test);
//--- ajoute un caractère à la chaîne de caractères
   StringSetCharacter(test,1,d1);
   Print(test);
  }

Comme il a été mentionné ci-dessus, la valeur d'une constante de caractère (ou variable) est un indice dans la table des caractères. L'indice étant un entier, il peut être écrit de différentes façons.

void OnStart()
  {
//--- 
   int a=0xAE;     // le code de ® correspond au littéral '\xAE'
   int b=0x24;     // le code de $ correspond au littéral '\x24'
   int c=0xA9;     // le code de © correspond au littéral '\xA9'
   int d=0x263A;   // le code de ☺ correspond au littéral '\x263A'
//--- affiche les valeurs
   Print(a,b,c,d);
//--- ajoute un caractère à la chaîne de caractères
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- remplace un caractère dans une chaîne
   StringSetCharacter(test,0,b);
   Print(test);
//--- remplace un caractère dans une chaîne
   StringSetCharacter(test,0,c);
   Print(test);
//--- remplace un caractère dans une chaîne
   StringSetCharacter(test,0,d);
   Print(test);
//--- codes des cartes
   int a1=0x2660;
   int b1=0x2661;
   int c1=0x2662;
   int d1=0x2663;
//--- ajoute le caractère pique
   StringSetCharacter(test,1,a1);
   Print(test);
//--- ajoute le caractère coeur
   StringSetCharacter(test,2,b1);
   Print(test);
//--- ajoute le caractère carreau
   StringSetCharacter(test,3,c1);
   Print(test);
//--- ajoute le caractère trèfle
   StringSetCharacter(test,4,d1);
   Print(test);
//--- Exemple de littéraux de caractères dans une chaîne
   test="Reine\x2660As\x2662";
   printf("%s",test);
  }

La représentation interne d'un littéral de caractère est de type ushort. Les constantes de caractères peuvent accepter des valeurs de 0 à 65535.

Voir aussi

StringSetCharacter(), StringGetCharacter(), ShortToString(), ShortArrayToString(), StringToShortArray()