Constantes de caracteres

En MQL5 los caracteres, como elementos de una línea, son los índices en conjunto de caracteres Unicode. Estos son unos valores hexadecimales que pueden ser convertidos en números enteros y con los que se puede ejecutar operaciones de números enteros, tales como, la suma y la resta.

Cualquier carácter solitario que viene entre comillas simples o el código ASCII hexadecimal en forma de '\x10' es una constante de caracteres y tiene el tipo ushort. Por ejemplo, la introducción del '0' representa el valor numérico 30 que corresponde al índice según el cual en la tabla de caracteres se encuentra el signo cero.

Ejemplo:

void OnStart()
  {
//--- determinemos las constantes de caracteres
   int symbol_0='0';
   int symbol_9=symbol_0+9; // obtenemos el signo '9'
//--- saquemos los valores de las constantes 
   printf("En forma decimal: symbol_0 = %d,  symbol_9 = %d",symbol_0,symbol_9);
   printf("En forma hexadecimal: symbol_0 = 0x%x,  symbol_9 = 0x%x",symbol_0,symbol_9);
//--- introduzcamos las constantes en una línea
   string test=""
   StringSetCharacter(test,0,symbol_0);
   StringSetCharacter(test,1,symbol_9);
//--- así se ven en la línea
   Print(test);
  }

Para un compilador durante el análisis de las líneas de constantes y las constantes de caracteres en el código fuente del programa la barra inversa es un carácter controlador. Algunos símbolos, por ejemplo, comillas simples ('), comillas dobles ("), barra inversa (\) y caracteres controladores se puede representar mediante una combinación de signos que se empiezan con la barra inversa (\), según se indica en la tabla de abajo:

Nombre del signo

Código mnemotécnico o imagen

Inscripción en MQL5

Valor numérico

nueva línea (cambio de línea)

LF

'\n'

10

tabulación horizontal  

HT

'\t'

9

retorno de carro

CR

'\r'

13

barra inversa

\

'\\'

92

comilla simple  

'

'\''

39

comilla doble  

"

'\"'

34

código hexadecimal

hhhh

'\xhhhh'

de 1 a 4 símbolos hexadecimales

código decimal

d

'\d'

número decimal de 0 a 65535

Si después de la barra inversa sigue un signo distinto a los arriba mencionados, entonces el resultado no está determinado.

Ejemplo:

void OnStart()
  {
//--- declaremos las constantes de caracteres
   int a='A';
   int b='$';
   int c='©';      // código 0xA9
   int d='\xAE';   // código del signo ®
//--- imprimamos las constantes
   Print(a,b,c,d);
//--- agreguemos el signo a la línea
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,0,b);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,0,c);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,0,d);
   Print(test);
//--- representemos signos en forma numérica
   int a1=65;
   int b1=36;
   int c1=169;
   int d1=174;
//--- agreguemos el signo a la línea
   StringSetCharacter(test,1,a1);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,1,b1);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,1,c1);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,1,d1);
   Print(test);
  }

Como se decía antes, el valor de una constante de caracteres (o una variable) representa un índice en la tabla de signos, y debido a que éste es un número entero, se permite escribirlo de varias maneras.

void OnStart()
  {
//--- 
   int a=0xAE;     // código del signo ® corresponde al literal '\xAE'
   int b=0x24;     // código del signo $ corresponde al literal '\x24'
   int c=0xA9;     // código del signo © corresponde al literal '\xA9'
   int d=0x263A;   // código del signo ☺ corresponde al literal '\x263A'
//--- saquemos los valores
   Print(a,b,c,d);
//--- agreguemos el signo a la línea
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,0,b);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,0,c);
   Print(test);
//--- cambiemos el signo en la línea
   StringSetCharacter(test,0,d);
   Print(test);
//--- códigos de palos
   int a1=0x2660;
   int b1=0x2661;
   int c1=0x2662;
   int d1=0x2663;
//--- agreguemos el signo de pica
   StringSetCharacter(test,1,a1);
   Print(test);
//--- agreguemos el signo de corazón
   StringSetCharacter(test,2,b1);
   Print(test);
//--- agreguemos el signo de diamante
   StringSetCharacter(test,3,c1);
   Print(test);
//--- agreguemos el signo de trébol
   StringSetCharacter(test,4,d1);
   Print(test);
//--- Ejemplo de literales de signos en la línea 
   test="Dama\x2660As\x2662";
   printf("%s",test);
  }

La representación interna del literal de signo es el tipo ushort. Las constantes de caracteres pueden adquirir valores de 0 a 65535.

Véase también

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