Constantes de Caracteres

Os caracteres como elementos de uma string,em MQL5, são índices do conjunto de caracteres Unicode. Eles são valores hexadecimais que podem ser convertidos para inteiros, e que podem ser manipulados por operações com inteiros como adição e subtração.

Qualquer caractere único entre aspas simples ou um código hexadecimal ASCII de um caractere como '\x10' é um caractere constante e é do tipo ushort. Por exemplo, uma anotação do tipo '0' representa o valor numérico 30, que corresponde ao índice do zero na tabela de caracteres.

Exemplo:

void OnStart()
  {
//--- define constantes de caracteres
   int symbol_0='0';
   int symbol_9=symbol_0+9; // obtém o símbolo '9'
//--- valores de saída de constantes
   printf("Num formato decimal: symbol_0 = %d,  symbol_9 = %d",symbol_0,symbol_9);
   printf("Num formato hexadecimal: symbol_0 = 0x%x,  symbol_9 = 0x%x",symbol_0,symbol_9);
//--- entrada de constantes em uma string
   string test=""
   StringSetCharacter(test,0,symbol_0);
   StringSetCharacter(test,1,symbol_9);
//--- isso é como eles se apresentam em uma string
   Print(test);
  }

Uma barra invertida (\) é um caractere de controle para o compilador ao lidar com strings constantes e constantes caracteres no texto fonte de um programa. Alguns símbolos, por exemplo uma aspas simples ('), aspas duplas ("), barra invertida (\) e caracteres de controle podem ser representados como combinação de símbolos que começam com uma barra invertida (\), de acordo com a tabela abaixo:

Nome do Caractere

Código Mnemônico ou imagem

Anotação em MQL5

Valor Numérico

linha nova (line feed)

LF

'\n'

10

tab horizontal  

HT

'\t'

9

retorno de carro

CR

'\r'

13

barra invertida

\

'\\'

92

aspas simples  

'

'\''

39

aspas duplas  

"

'\"'

34

código hexadecimal

hhhh

'\xhhhh'

1 a 4 caracteres hexadecimais

código decimal

d

'\d'

número decimal de 0 a 65535

Caso uma barra invertida seja seguida por outro caractere não descrito acima, o resultado é indefinido.

Exemplo

void OnStart()
  {
//--- declara constantes de caracteres
   int a='A';
   int b='$';
   int c='©';      // código 0xA9
   int d='\xAE';   // código do símbolo ®
//--- saída imprime constantes
   Print(a,b,c,d);
//--- acrescenta um caractere na string
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- substitui um caractere na string
   StringSetCharacter(test,0,b);
   Print(test);
//--- substitui um caractere na string
   StringSetCharacter(test,0,c);
   Print(test);
//--- substitui um caractere na string
   StringSetCharacter(test,0,d);
   Print(test);
//--- representa caracteres como número
   int a1=65;
   int b1=36;
   int c1=169;
   int d1=174;
//--- acrescenta um caractere na string
   StringSetCharacter(test,1,a1);
   Print(test);
//--- acrescenta um caractere na string
   StringSetCharacter(test,1,b1);
   Print(test);
//--- acrescenta um caractere na string
   StringSetCharacter(test,1,c1);
   Print(test);
//--- acrescenta um caractere na string
   StringSetCharacter(test,1,d1);
   Print(test);
  }

Como foi mencionado acima, o valor de uma constante caractere (ou variável) é o valor do índice na tabela de caracteres. Sendo o índice um inteiro, pode ser escrito de diferentes maneiras.

void OnStart()
  {
//--- 
   int a=0xAE;     // o código de ® corresponde ao literal '\xAE' 
   int b=0x24;     // o código de $ corresponde ao literal '\x24' 
   int c=0xA9;     // o código de © corresponde ao literal '\xA9' 
   int d=0x263A;   // o código de ☺ corresponde ao literal '\x263A' 
//--- mostrar valores
   Print(a,b,c,d);
//--- acrescenta um caractere na string
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- substitui um caractere na string
   StringSetCharacter(test,0,b);
   Print(test);
//--- substitui um caractere na string
   StringSetCharacter(test,0,c);
   Print(test);
//--- substitui um caractere na string
   StringSetCharacter(test,0,d);
   Print(test);
//--- código de terno cartão
   int a1=0x2660;
   int b1=0x2661;
   int c1=0x2662;
   int d1=0x2663;
//--- acrescenta um caractere de espadas
   StringSetCharacter(test,1,a1);
   Print(test);
//--- acrescenta um caractere de copas
   StringSetCharacter(test,2,b1);
   Print(test);
//--- acrescenta um caractere de ouros
   StringSetCharacter(test,3,c1);
   Print(test);
//--- acrescenta um caractere de paus
   StringSetCharacter(test,4,d1);
   Print(test);
//--- Exemplo de literais de caractere em uma string
   test="Rainha\x2660Ás\x2662";
   printf("%s",test);
  }

A representação internal de um literal de caractere é do tipo ushort. Constantes de caracteres podem aceitar valores de 0 a 65535.

Também Veja

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