문자 상수

MQL5에서 문자열의 요소로 사용되는 문자는 유니코드 문자 집합의 인덱스입니다. 이 값은 정수로 캐스팅할 수 있는 16진수 값이며, 더하기 및 빼기와 같은 정수 연산으로 조작할 수 있습니다.

따옴표 또는 '\x10'으로 표시된 문자의 16진수 ASCII 코드는 문자 상수이며 ushort 타입입니다. 예를 들어, '0' 유형의 레코드는 숫자 값 30으로, 문자 테이블의 인덱스에 해당합니다.

예제:

void OnStart()
  {
//--- 문자 상수 정의
   int symbol_0='0';
   int symbol_9=symbol_0+9; // 심볼 '9' 획득
//--- 상수 출력 값
   printf("In a decimal form: symbol_0 = %d,  symbol_9 = %d",symbol_0,symbol_9);
   printf("In a hexadecimal form: symbol_0 = 0x%x,  symbol_9 = 0x%x",symbol_0,symbol_9);
//--- 문자열에 상수 입력
   string test=""
   StringSetCharacter(test,0,symbol_0);
   StringSetCharacter(test,1,symbol_9);
//--- 이것이 그들이 문자열로 된 모습입니다
   Print(test);
  }

백슬래시는 프로그램의 원본 텍스트에서 상수 문자열과 문자 상수를 처리할 때 컴파일러의 제어 문자입니다. 작은따옴표('), 큰따옴표('), 백슬래시(\) 및 컨트롤 문자와 같은 일부 기호는 아래 표에 따라 백슬래시(\)로 시작하는 기호의 조합으로 표시될 수 있습니다:

문자 이름

니모닉 코드 또는 이미지

MQL5 레코드

숫자 값

줄바꿈

LF

'\n'

10

horizontal tab  

HT

'\t'

9

carriage return

CR

'\r'

13

백슬래시

\

'\\'

92

작은따옴표  

'

'\''

39

큰따옴표  

"

'\"'

34

16진수 코드

hhhh

'\xhhhh'

1에서 4까지의 16진수 문자

십진수 코드

d

'\d'

0 에서부터 65535 까지의 십진수

백슬래시 뒤에 위에서 설명한 문자 이외의 문자가 있으면 결과가 정의되지 않습니다.

예제

void OnStart()
  {
//--- 문자 상수 선언
   int a='A';
   int b='$';
   int c='©';      // 코드 0xA9
   int d='\xAE';   // 심볼 ® 코드
//--- 출력 인쇄 상수
   Print(a,b,c,d);
//--- 문자열에 문자 추가
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- 문자열의 문자 교체
   StringSetCharacter(test,0,b);
   Print(test);
//--- 문자열의 문자 교체
   StringSetCharacter(test,0,c);
   Print(test);
//--- 문자열의 문자 교체
   StringSetCharacter(test,0,d);
   Print(test);
//--- 문자를 숫자로 표현
   int a1=65;
   int b1=36;
   int c1=169;
   int d1=174;
//--- 문자열에 문자 추가
   StringSetCharacter(test,1,a1);
   Print(test);
//--- 문자열에 문자 추가
   StringSetCharacter(test,1,b1);
   Print(test);
//--- 문자열에 문자 추가
   StringSetCharacter(test,1,c1);
   Print(test);
//--- 문자열에 문자 추가
   StringSetCharacter(test,1,d1);
   Print(test);
  }

위에서 언급한 바와 같이 문자 상수(또는 변수) 값은 문자 표의 색인입니다. 인덱스는 정수이므로 다른 방법으로 쓸 수 있습니다.

void OnStart()
  {
//--- 
   int a=0xAE;     // ®의 코드는 '\xAE' 리터럴에 해당합니다
   int b=0x24;     // $ 코드는 '\x24' 리터럴에 해당합니다
   int c=0xA9;     // ©의 코드는 '\xA9' 리터럴에 해당합니다
   int d=0x263A;   // ☺ 코드는 '\x263A' 리터럴에 해당합니다
//--- 값 보기
   Print(a,b,c,d);
//--- 문자열에 문자 추가
   string test="";
   StringSetCharacter(test,0,a);
   Print(test);
//--- 문자열의 문자 교체
   StringSetCharacter(test,0,b);
   Print(test);
//--- 문자열의 문자 교체
   StringSetCharacter(test,0,c);
   Print(test);
//--- 문자열의 문자 교체
   StringSetCharacter(test,0,d);
   Print(test);
//--- 코드 세트
   int a1=0x2660;
   int b1=0x2661;
   int c1=0x2662;
   int d1=0x2663;
//--- 스페이드 문자 추가
   StringSetCharacter(test,1,a1);
   Print(test);
//--- 하트 문자 추가
   StringSetCharacter(test,2,b1);
   Print(test);
//--- add a character of diamonds
   StringSetCharacter(test,3,c1);
   Print(test);
//--- 다이아몬드 문자 추가
   StringSetCharacter(test,4,d1);
   Print(test);
//--- 문자열의 문자 리터럴 예제
   test="Queen\x2660Ace\x2662";
   printf("%s",test);
  }

문자 리터럴의 내부 표현은 ushort 타입입니다. 문자 상수는 0에서 65535 사이의 값을 사용할 수 있습니다.

더 보기

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