2017-10-03 16 views
-2

나는 임의의 값으로 각 문자를 XORing하여 코드에서 난독 화 된 문자열이 있습니다.C++ : 특수 문자가있는 XOR 된 문자열은 원시 문자열 리터럴로 컴파일되지 않습니까?

그러나 여러 줄의 원시 문자열 리터럴은 올바르게 컴파일되지 않습니다.

다음 그림에서 양쪽 끝에 적절한 구분 기호를 사용하는 경우에도 MSVS2015가 문자열을 올바르게 구문 분석하지 않는 방법을 볼 수 있습니다. 전체 텍스트에 구문 분석되지 않고 검정색 텍스트가 표시됩니다.

코드를 컴파일하려고하면 리터럴의 닫는 중괄호를 찾을 수 없다는 오류가 발생합니다 (적절한 위치에 있지만 닫는 delimeter 이후 문자열 끝 부분 등). 수동으로 검은 비트를 지우면 올바른 컴파일이 수행됩니다 (물론 더 이상 올바르게 해독 할 수없는 문자열이 있음에도 불구하고).

enter image description here

나는 XOR 함수의 다양한 결과 문자가 제대로 .H 파일 내부에 저장 할 수 없기 때문에 이런 일이 있으리라 믿고있어. 이 문제에 대한 해결책이 있습니까? 파일 형식을 유니 코드로 전환 해봤지만 작동하지 않았습니다.

+1

코드 인쇄 화면을 표시하지 마십시오. – bolov

+3

문자열을 인코딩하는 다른 방법을 고려해야할까요? 아마도 일종의 16 진수 인코딩 체계 또는 평범한 ASCII 문자로 나타나는 결과일까요? 그리고 물론 문자열 리터럴이 [to long]이 아닌지 확인하십시오 (https://msdn.microsoft.com/en-us/library/sx08afx2.aspx). –

+0

@ user23573 그는 원시 문자열을 사용하고 있습니다. 이스케이프 문자는 문제가되지 않습니다 – bolov

답변

0

원시 문자열을 사용하는 것은 너무 단순합니다. 시퀀스 ..|..을 구분 기호로 사용하며 문자열 끝에 )..|.. 시퀀스가 ​​없을 것입니다.

변형 된 (6)에서 in cppreference으로 설명한대로 구분 된 원시 문자열의 전체 사양을 사용하십시오. 이것은 C++ 표준 섹션 §2.14.5 문자열 리터럴에서도 설명됩니다.

R "D-문자 시퀀스 (원시 텍스트) D-문자 시퀀스는"

키가 사용하는 것입니다 "다음과 같이 템플릿입니다 D- 문자 시퀀스 ".

제외 설정의 기본 소스 문자의 구성원 : 수평 탭을 나타내는 공간, 왼쪽 괄호 (오른쪽 괄호), 백 슬래시 \, 및 제어 문자, 이 순서는 다음과 같은 포함 할 수 있습니다 세로 탭, 폼 피드 및 줄 바꿈.

문자열 리터럴 프리픽스에 R을 가진 원료 문자열 리터럴 다음과 같이 설명된다 작동 그 D-문자 시퀀스가 ​​어떻게

. d-char-sequence는 구분 기호로 사용됩니다. raw-string의 종료 d-char-sequence는 초기 d-char-sequence와 같은 문자 시퀀스입니다. D- 문자 시퀀스는 최대 16 문자로 구성됩니다.

이렇게하면 원시 문자열에 원본 문자 집합 (여기서는 유니 코드)이 지원하는 문자가 합법적으로 포함될 수 있습니다. 원시 문자열에는 따옴표 괄호 백 슬래시 및 심지어 줄 바꿈이 포함될 수 있습니다.

소리처럼 복잡하지 않습니다.그냥 원시 문자열에 접두어와 접미사를 추가하십시오.

std::string(R"my-delimiter(... long text ...)my-delimiter"); 

물론 원시 문자열 리터럴을 ... long text ...으로 대체하십시오. 시퀀스 )my-delimiter"이 원시 문자열 텍스트에 나타나지 않는지 확인하십시오.

+0

질문에 따라 "수동으로 검은 비트를 지우면 적절한 편집이 이루어집니다"라는 이유는 설명하지 않습니다. 분리 문자가 끝에 없으면 중간에있는 문자열을 제거해도 문제가 해결되지 않습니다. – MSalters

+0

원래 질문에 명시된 바와 같이 끝에 적절한 구분 기호가 있습니다. – Tyson