我读到了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中提供了编译错误。哪个编译器有此功能?有什么细节吗?
答案 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格式代码。
答案 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彩色文本的答案可能是这样的
如果您认为不正确,请对其进行修改,然后我将接受修改