C 语 言 终 端 炫 彩 魔 术 手:从 8 色 到 24 位 真 彩 全 解 锁,ANSI 转 义 序 列 神 级 秘 籍 让 你 的 输 出 亮 瞎 屏 幕!_ansi终端转义颜色代码
文 章 目 录
- 一、基 本 格 式
- 二、文 本 颜 色(前 景 色)
- 三、背 景 颜 色
- 四、文 本 样 式 参 数
- 五、24 位 真 彩 色(RGB)
- 六、系 统 兼 容 性
-
- 1、Linux/macOS
- 2、Windows
- 七、完 整 代 码 示 例 及 注 意 事 项
-
- 1、示 例 代 码
- 2、注 意 事 项
在 C 语 言 中,通 过 ANSI 转 义 序 列 可 以 实 现 终 端 的 彩 色 输 出(包 括 文 本 颜 色、背 景 色、文 本 样 式 等),适 用 于 支 持 ANSI 标 准 的 终 端(如 Linux/macOS 终 端、Windows 10 + 命 令 提 示 符 / PowerShell)。
一、基 本 格 式
ANSI 转 义 序 列 的 格 式 为:
\\033[参数1;参数2;...m
- 多 个 参 数 用 分 号 分 隔,用 于 同 时 设 置 颜 色、背 景、样 式 等。
- 结 束 样 式 / 颜 色 需 用 \\033[0m 重 置(否 则 后 续 输 出 会 继 承 样 式)。
二、文 本 颜 色(前 景 色)
8/16 色 基 础 前 景 色(普 通 + 亮 色)
三、背 景 颜 色
8/16 色 基 础 背 景 色(普 通 + 亮 色)
四、文 本 样 式 参 数
五、24 位 真 彩 色(RGB)
如 果 终 端 支 持 24 位 颜 色(现 代 终 端 如 iTerm2、Windows Terminal 等),可 以 用 RGB 值 精 确 指 定 颜 色:
- 前 景 色:
\\033[38;2;R;G;Bm
(R、G、B 为 0 - 255 的 数 值) - 背 景 色:
\\033[48;2;R;G;Bm
六、系 统 兼 容 性
1、Linux/macOS
绝 大 多 数 终 端 默 认 支 持 ANSI 序 列。
2、Windows
-
Windows 10 及 以 上 的 命 令 提 示 符 / PowerShell 需 先 开 启 “虚 拟 终 端 处 理”(可 通 过 代 码 启 用,见 下 方 示 例)。
-
旧 版 Windows(如 Win7)默 认 不 支 持,需 借 助 第 三 方 终 端(如 Cmder)。
七、完 整 代 码 示 例 及 注 意 事 项
1、示 例 代 码
vs2022
#include <stdio.h>#ifdef _WIN32#include <windows.h> //Windows启用ANSI支持#endif//Windows开启ANSI转义序列支持(Win10+)void enable_ansi() {#ifdef _WIN32 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); DWORD mode; GetConsoleMode(hOut, &mode); mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode(hOut, mode);#endif}int main() { enable_ansi(); //仅Windows需要 //基础前景色+背景色 printf(\"普通红色文本:\\033[31m红色\\033[0m\\n\"); printf(\"绿色背景+黄色文本:\\033[42;33m绿底黄字\\033[0m\\n\"); printf(\"亮蓝色文本:\\033[94m亮蓝\\033[0m\\n\"); printf(\"亮紫色背景:\\033[105m亮紫底\\033[0m\\n\\n\"); //文本样式 printf(\"加粗:\\033[1m加粗文本\\033[0m\\n\"); printf(\"斜体:\\033[3m斜体文本\\033[0m\\n\"); printf(\"下划线:\\033[4m下划线文本\\033[0m\\n\"); printf(\"反显:\\033[7m反显文本\\033[0m\\n\"); printf(\"闪烁(部分终端支持):\\033[5m闪烁文本\\033[0m\\n\\n\"); //24位真彩色 printf(\"24位红色前景:\\033[38;2;255;0;0mRGB红色\\033[0m\\n\"); printf(\"24位蓝色背景:\\033[48;2;0;0;255m蓝底文本\\033[0m\\n\"); printf(\"混合:\\033[1;38;2;0;255;0;48;2;255;255;0m加粗绿字黄底\\033[0m\\n\"); return 0;}
2、注 意 事 项
- 务 必 用
\\033[0m
重 置 样 式,否 则 后 续 输 出 会 持 续 生 效。 - 部 分 终 端 对 某 些 样 式(如 斜 体、闪 烁)支 持 有 限,建 议 实 际 测 试。
- 24 位 真 彩 色 需 终 端 支 持(可 通 过
echo -e \"\\033[38;2;255;0;0mTest\\033[0m
\" 测 试)。