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

时间:2011-09-14 10:41:38

标签: c++ c colors

我读到了ANSI-C转义码here。试图在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();

}

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

我错过了什么吗?

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

textcolor(10);

但它在g ++和Visual Studio中提供了编译错误。哪个编译器有此功能?有什么细节吗?

8 个答案:

答案 0 :(得分:8)

我害怕你忘记了ESC角色:

#include <cstdio>

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

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

答案 1 :(得分:6)

我前段时间创建了一个非常simple text-management library的多平台,它使用Windows的本机API调用和其他平台的ANSI转义序列。它已完整记录,您还可以浏览源代码。

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

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

希望这有帮助。

答案 2 :(得分:3)

ANSI转义码使用ansi.sys设备驱动程序在DOS上运行。它们不能在Windows XP或更高版本上运行。您需要使用console API SetConsoleTextAttribute()

textcolor在borland turbo c ++编译器中可用。

答案 3 :(得分:2)

给所有阅读此帖子的人的注释:重读https://en.wikipedia.org/wiki/ANSI_escape_code#Windows“在2016年使用Windows 10“阈值2”时,Microsoft意外地开始在控制台应用程序中支持ANSI转义序列,从而从(或远程)移植软件。可以更轻松地访问Unix。“ Windows现在确实支持ANSI代码,即使仅在较新的版本上也是如此。

答案 4 :(得分:1)

Windows中不支持ANSI格式代码。

http://en.wikipedia.org/wiki/ANSI_escape_code

答案 5 :(得分:1)

Windows 10支持VT100上的ANSI转义序列以及具有256种颜色扩展的派生终端仿真器技术。描述和示例在页面Console Virtual Terminal Sequences上。

$.ajax({
  url: '<URL>',
  type: "POST",
  dataType: 'arraybuffer',
  success: function(data) {
    let blob = new Blob([data], {type: 'arraybuffer'});
    let link = document.createElement('a');
    let objectURL = window.URL.createObjectURL(blob);
    link.href = objectURL;
    link.target = '_self';
    link.download = "fileName.pdf";
    (document.body || document.documentElement).appendChild(link);
    link.click();
    setTimeout(()=>{
        window.URL.revokeObjectURL(objectURL);
        link.remove();
    }, 100);
  }
});

答案 6 :(得分:0)

在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]

答案 7 :(得分:0)

这将在任何支持ANSI转义序列的操作系统中工作

#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中的蓝色

字符字符是要以彩色文本打印的字符

有关使用ANSI Escape在ANSI Color Specific RGB Sequence Bash上输出RGB彩色文本的答案可能是这样的

如果您认为不正确,请对其进行修改,然后我将接受修改