[C ++] 콘솔에서 컬러 텍스트를 출력하기 위해 ANSI 이스케이프 코드를 사용하는 방법
유감스럽게도 ESC 문자를 잊어 버렸습니다.
#include <cstdio>
int main()
{
printf("%c[%dmHELLO!\n", 0x1B, 32);
}
불행히도 ANSI 이스케이프 시퀀스를 지원하는 콘솔에서만 작동합니다 (예 : bash를 사용하는 Linux 콘솔 또는 ansi.sys를 사용하는 이전 Windows 콘솔).
-------------------저는 얼마 전에 매우 간단한 텍스트 관리 라이브러리를 만들었습니다. 멀티 플랫폼이기 때문에 Windows 용 네이티브 API 호출과 나머지 플랫폼 용 ANSI 이스케이프 시퀀스를 사용합니다. 완전히 문서화되어 있으며 소스 코드를 찾아 볼 수도 있습니다.
특정 질문에 대해 일부 코드가 누락되었다고 생각합니다. 예를 들어, 텍스트 색상을 변경하려면 다음과 같은 것을 사용해야합니다.
static const char * CSI = "\33[";
printf( "%s%s", CSI, "31m" ); // RED
도움이 되었기를 바랍니다.
-------------------ANSI 이스케이프 코드는 ansi.sys 장치 드라이버를 사용하여 DOS에서 작동했습니다. 그들은 Windows XP 이상에서 작동하지 않습니다. 콘솔 API 를 사용해야합니다. SetConsoleTextAttribute()
textcolor
볼랜드 터보 C ++ 컴파일러에서 사용할 수있었습니다.
이 게시물을 읽는 모든 사람에게 보내는 메모 : https://en.wikipedia.org/wiki/ANSI_escape_code#DOS_and_Windows
-------------------2016 년에 Microsoft는 예기치 않게 ANSI 이스케이프 시퀀스 지원을 구현 한 Windows 10 버전 1511 업데이트를 출시했습니다. 이 변경 사항은 Linux 용 Windows 하위 시스템을 보완하기 위해 설계되었으며 명령 프롬프트에서 사용하는 Windows 콘솔 호스트에 Unix 계열 시스템 용 터미널 기반 소프트웨어에서 사용하는 문자 이스케이프 코드 지원을 추가했습니다. 이것은 기본 동작이 아니며 다음을 통해 Win32 API를 사용하여 프로그래밍 방식으로 활성화해야합니다.
SetConsoleMode(handle, ENABLE_VIRTUAL_TERMINAL_PROCESSING)
Windows 10은 VT100에서 ANSI 이스케이프 시퀀스를 지원하고 256 색 확장이있는 파생 된 터미널 에뮬레이터 기술을 지원합니다. 설명과 예는 콘솔 가상 터미널 시퀀스 페이지에 있습니다.
std::ostringstream ss;
for (int i = 0; i < 10; ++i)
ss << "\x1b[38;2;" << 5 * i << ";" << 255 - 10 * i << ";220m"
<< "ANSI Escape Sequence " << i << std::endl;
std::cout << ss.str();
-------------------ANSI 형식화 코드는 Windows에서 지원되지 않습니다.
http://en.wikipedia.org/wiki/ANSI_escape_code
-------------------Windows 10에서는 현재 콘솔에서 VT100 모드를 활성화하여 VT100 스타일을 사용할 수 있습니다.
#include <windows.h>
#include <iostream>
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
int main(){
DWORD l_mode;
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleMode(hStdout,&l_mode);
SetConsoleMode( hStdout, l_mode |
ENABLE_VIRTUAL_TERMINAL_PROCESSING |
DISABLE_NEWLINE_AUTO_RETURN );
for (int i = 0; i < 10; ++i)
std::cout << "\x1b[38;2;" << 5 * i << ";" << 255 - 10 * i << ";220m"
<< "ANSI Escape Sequence " << i << std::endl;
}
msdn 페이지 참조 : [ https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences][1]
-------------------이것은 ANSI 이스케이프 시퀀스를 지원하는 모든 OS에서 작동합니다.
#include <iostream>
void printColored(char r, char g, char b, char _char_) {
std::cout << '\33' << '[' << '38' << ';' << '2' << ';' << r << ';' << g << ';' << b << 'm' << _char_ << '\33' << '[' << 'm'
}
노트 :
char r은 RGB의 빨간색입니다.
char g는 RGB의 녹색입니다.
char b는 RGB의 파란색입니다.
char char 은 컬러 텍스트로 인쇄 할 문자입니다.
이것은 ANSI Escape를 사용하여 ANSI Color Specific RGB Sequence Bash 에서 RGB 색상 텍스트를 출력하는 것에 대한 답변 일 수 있습니다.
사실이 아니라고 생각하시면 그냥 편집하시면됩니다.
출처
https://stackoverflow.com/questions/7414983