如何使用ANSI Escape代码在Console上输出彩色文本

gol*_*ean 5 c c++ colors

在这里阅读有关ANSI-C转义码的内容.试图在C/C++ printf/cout中使用它来为输出的文本着色,但没有成功.

码:

#include <iostream>

 #include <cstdio>

int main()
{

    int a=3, b=5;
    int &ref = a;

    ref = b;

    //cout << "\155\32\m" << a << b <<'\n'; //here it prints m?m 5, no colored text
    printf("\155\32\m %d",a); //here to it prints same - m?m 5, 

    getchar();

}
Run Code Online (Sandbox Code Playgroud)

如何使用这些转义码将彩色文本输出到控制台?

我错过了什么吗?

编辑:在一些C++代码中,我看到了对此函数的调用

textcolor(10);
Run Code Online (Sandbox Code Playgroud)

但它在g ++和Visual Studio中提供了编译错误.哪个编译器有此功能?任何细节?

pau*_*lla 8

我怕你忘记了ESC角色:

#include <cstdio>

int main()
{
    printf("%c[%dmHELLO!\n", 0x1B, 32);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它只适用于支持ANSI转义序列的控制台(如使用bash的linux控制台或使用ansi.sys的旧Windows控制台)

  • @ pau.estella - 谢谢,但它仍然没有打印颜色.相反它打印←[32mHELLO!也可以.解释这个printf("%c [%dmHELLO!\n",0x1B,32); 作品. (2认同)

Bal*_*arq 6

我不久前创建了一个非常简单的文本管理库,它是多平台的,它使用Windows的本机API调用和其他平台的ANSI转义序列.它已完整记录,您还可以浏览源代码.

关于您的具体问题,我认为您缺少一些代码.例如,为了更改文本的颜色,您应该使用以下内容:

static const char * CSI = "\33[";
printf( "%s%s", CSI, "31m" );   // RED
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


use*_*716 6

在 Windows 10 下,可以通过在当前控制台中激活 VT100 模式来使用 VT100 风格:

#include <windows.h>
#include <iostream>

#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#define DISABLE_NEWLINE_AUTO_RETURN  0x0008

int main()
{       
   HANDLE handleOut = GetStdHandle(STD_OUTPUT_HANDLE);
   DWORD consoleMode;
   GetConsoleMode( handleOut , &consoleMode);
   consoleMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
   consoleMode |= DISABLE_NEWLINE_AUTO_RETURN;            
   SetConsoleMode( handleOut , consoleMode );

   for (int i = 0; i < 10; ++i)
   {
      std::cout << "\x1b[38;2;" << 5 * i << ";" << 255 - 10 * i << ";220m" 
             << "ANSI Escape Sequence " << i << std::endl;
   }
}
Run Code Online (Sandbox Code Playgroud)

请参阅msdn页面:[https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences][1]


Sha*_*des 5

给阅读这篇文章的任何人的注释:https ://en.wikipedia.org/wiki/ANSI_escape_code#DOS_and_Windows

2016年,微软发布了Windows 10 Version 1511更新,意外地实现了对ANSI转义序列的支持。这一更改旨在补充适用于 Linux 的 Windows 子系统,为命令提示符使用的 Windows 控制台主机添加对类 Unix 系统的基于终端的软件所使用的字符转义码的支持。这不是默认行为,必须通过 Win32 API 以编程方式启用SetConsoleMode(handle, ENABLE_VIRTUAL_TERMINAL_PROCESSING)