printf实现彩色输出, ANSI 转义序列详解

news/2024/11/2 13:19:59/

在这里插入图片描述

ANSI 转义序列是一种在终端中改变文本颜色和其他属性的方法。基本格式为 \e[<code>m,其中 <code> 是一系列数字,用于表示不同的颜色和属性。

基本格式
\e[<code>m

这里的 <code> 可以是单个或多个数字,用分号 ; 分隔。例如,1;31 表示加粗红色文本。

ANSI 颜色代码

前景色
代码描述
30黑色
31红色
32绿色
33黄色
34蓝色
35紫色(品红)
36青色
37白色
39默认颜色
背景色
代码描述
40黑色背景
41红色背景
42绿色背景
43黄色背景
44蓝色背景
45紫色(品红)背景
46青色背景
47白色背景
49默认背景颜色
样式代码
代码描述
0重置所有属性
1加粗(亮色)
2淡色
3斜体(部分终端不支持)
4下划线
5闪烁
7反色(反转前景和背景)
8隐藏

示例代码

下面是一些使用 ANSI 转义序列实现彩色输出的示例代码:

示例 1:简单彩色输出
#include <stdio.h>int main() {printf("\e[31mRed Text\e[0m\n"); // 红色文本printf("\e[32mGreen Text\e[0m\n"); // 绿色文本printf("\e[33mYellow Text\e[0m\n"); // 黄色文本return 0;
}
示例 2:复合样式输出
#include <stdio.h>int main() {printf("\e[1;31mBold Red Text\e[0m\n"); // 加粗红色文本printf("\e[4;32mUnderlined Green Text\e[0m\n"); // 下划线绿色文本printf("\e[7;33mReversed Yellow Text\e[0m\n"); // 反色黄色文本return 0;
}
示例 3:背景颜色输出
#include <stdio.h>int main() {printf("\e[41mRed Background\e[0m\n"); // 红色背景printf("\e[42mGreen Background\e[0m\n"); // 绿色背景printf("\e[43mYellow Background\e[0m\n"); // 黄色背景return 0;
}
示例 4:组合颜色和样式
#include <stdio.h>int main() {printf("\e[1;31;42mBold Red Text on Green Background\e[0m\n"); // 加粗红色文本在绿色背景上return 0;
}

高亮和淡色

除了基本的颜色代码外,还可以使用高亮(明亮)和淡色(浅色)版本的颜色:

高亮(明亮)前景色
代码描述
90淡灰色
91亮红色
92亮绿色
93亮黄色
94亮蓝色
95亮紫色(品红)
96亮青色
97亮白色
高亮(明亮)背景色
代码描述
100淡灰色背景
101亮红色背景
102亮绿色背景
103亮黄色背景
104亮蓝色背景
105亮紫色(品红)背景
106亮青色背景
107亮白色背景

示例 5:高亮颜色输出

#include <stdio.h>int main() {printf("\e[91mBright Red Text\e[0m\n"); // 亮红色文本printf("\e[92mBright Green Text\e[0m\n"); // 亮绿色文本printf("\e[93mBright Yellow Text\e[0m\n"); // 亮黄色文本return 0;
}

示例 6:高亮背景颜色输出

#include <stdio.h>int main() {printf("\e[101mBright Red Background\e[0m\n"); // 亮红色背景printf("\e[102mBright Green Background\e[0m\n"); // 亮绿色背景printf("\e[103mBright Yellow Background\e[0m\n"); // 亮黄色背景return 0;
}

示例 7:组合高亮颜色和样式

#include <stdio.h>int main() {printf("\e[1;91;102mBold Bright Red Text on Bright Green Background\e[0m\n"); // 加粗亮红色文本在亮绿色背景上return 0;
}

注意事项

  • 兼容性:不同的终端支持的 ANSI 转义序列可能会有所不同,有些终端可能不支持某些样式或颜色。
  • 重置所有属性:在使用 ANSI 转义序列后,最好添加 \e[0m 来重置所有属性,确保后续的文本不受影响。
  • Windows 支持:在 Windows 系统中,默认的命令行工具(如 cmd.exe)对 ANSI 转义序列的支持有限。可以使用 PowerShell 或启用虚拟终端处理的 cmd.exe(通过 ENABLE_VIRTUAL_TERMINAL_PROCESSING 选项)来支持 ANSI 转义序列。

示例:Windows 上启用 ANSI 支持

在 Windows 10 中,可以通过以下代码启用对 ANSI 转义序列的支持:

#include <windows.h>
#include <stdio.h>int main() {HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);DWORD consoleMode;GetConsoleMode(hConsole, &consoleMode);consoleMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;SetConsoleMode(hConsole, consoleMode);printf("\e[31mRed Text\e[0m\n");printf("\e[32mGreen Text\e[0m\n");printf("\e[33mYellow Text\e[0m\n");return 0;
}

通过这些示例和解释,你应该能够更好地理解和应用 ANSI 转义序列来实现彩色输出。希望这能帮助你在实际项目中使用 printf 实现丰富多彩的终端输出。


http://www.ppmy.cn/news/1543874.html

相关文章

服务器被黑客攻击:如何查看攻击流量

在互联网时代&#xff0c;服务器遭受黑客攻击的风险日益增加。了解如何检测和分析攻击流量对于维护服务器安全至关重要。本文将介绍几种常用的方法和技术&#xff0c;帮助系统管理员快速识别和响应潜在的攻击行为。 一、日志分析 日志文件是追踪服务器活动的第一手资料&#…

AI人工智能电话机器人如何使用效果最好

随着科技的不断进步&#xff0c;人工智能已经成为了我们生活中不可或缺的一部分。AI人工智能电话机器人正是其中的一种形式&#xff0c;可以帮助企业或组织更好地实现电话营销的目标&#xff0c;接下来我们看看ai智能电话机器人怎么使用。 什么是AI人工智能机器人电话&#xf…

一文了解Linux内核I2C子系统,驱动苹果MFI加密芯片

版本 日期 作者 变更表述 1.0 2024/10/27 于忠军 文档创建 背景&#xff1a;由于苹果有一套MFI IAP2的蓝牙私有协议&#xff0c;这个协议是基于BR/EDR的RFCOMM自定义UUID来实现IAP2协议的通信&#xff0c;中间会牵扯到苹果加密芯片的I2C读取&#xff0c;所以我们借此机…

GPS、GNSS与RTK

GPS&#xff08;Global Positioning System&#xff09; 全球卫星定位系统&#xff0c;一种以空中卫星为基础的高精度无线电导航的定位系统。 RTK&#xff08;Real - time kinematic&#xff09; 载波相位差分技术&#xff0c;实时处理两个测量站相位观测量的差分方法&#…

从零开始学AIStarter:创作者模式全攻略【AI工作流、数字人、大模型、对话、设计...】

在数字化时代&#xff0c;项目管理工具成为了提高工作效率、促进团队协作不可或缺的一部分。对于创作者来说&#xff0c;选择一个既能满足个性化需求又能提供高效管理支持的平台尤为重要。AIStarter项目管理平台正是这样一款专为创意人士设计的强大工具&#xff0c;它不仅提供了…

GPT-4V 是什么?

GPT-4V 是一种能够“看图说话”的人工智能。传统的聊天机器人只能理解文字&#xff0c;而 GPT-4V 不仅能理解文字&#xff0c;还能看图&#xff0c;并回答跟图片相关的问题。 用简单的例子解释&#xff1a; 假设你给 GPT-4V 发一张图片&#xff0c;它能描述出图片里有什么&am…

强化学习之父Richard Sutton给出一个简单思路,大幅增强所有RL算法

来源 | 机器之心 在当今的大模型时代&#xff0c;以 RLHF 为代表的强化学习方法具有无可替代的重要性&#xff0c;甚至成为了 OpenAI ο1 等模型实现强大推理能力的关键。 但这些强化学习方法仍有改进空间。近日&#xff0c;强化学习之父、阿尔伯塔大学教授 Richard Sutton 的…

C++ 数据结构 静态顺序表、动态顺序表。

静态顺序表&#xff08;Static Array List&#xff09;是一种线性数据结构&#xff0c;通常用数组实现。它具有固定的大小&#xff0c;并在编译时分配内存。以下是静态顺序表的一些基本概念和实现示例。 静态顺序表基本概念 固定大小&#xff1a;静态顺序表的大小在创建时定义…