我在这里阅读有关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中提供了编译错误.哪个编译器有此功能?任何细节?
我怕你忘记了ESC角色:
#include <cstdio>
int main()
{
printf("%c[%dmHELLO!\n", 0x1B, 32);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它只适用于支持ANSI转义序列的控制台(如使用bash的linux控制台或使用ansi.sys的旧Windows控制台)
我不久前创建了一个非常简单的文本管理库,它是多平台的,它使用Windows的本机API调用和其他平台的ANSI转义序列.它已完整记录,您还可以浏览源代码.
关于您的具体问题,我认为您缺少一些代码.例如,为了更改文本的颜色,您应该使用以下内容:
static const char * CSI = "\33[";
printf( "%s%s", CSI, "31m" ); // RED
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
在 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]
给阅读这篇文章的任何人的注释: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)