545 字
3 分钟
ASCII输出光标和颜色

ASCII输出光标和颜色#

ASCII 控制字符 - “\033”#

ASCII控制字符的编号范围是0-31和127(0x00-0x1F和0x7F),共33个字符。

输出到控制台时,可以利用控制字符来控制输出文本的显示效果。

控制字符可以用8进制或16进制表示,比如:"\033", "\0x1b", "\x1b"均表示同一个控制字符,含义是ESC

ESC后面跟一个格式字符串,用来设置颜色或控制光标

格式含义
\033[0m关闭所有属性
\033[1m设置高亮度
\033[4m下划线
\033[5m闪烁
\033[7m反显
\033[8m消隐
\033[30~37m设置前景色
\033[40~47;m设置背景色
\033[nA光标上移n行
\033[nB光标下移n行
\033[nC光标右移n行
\033[nD光标左移n行
\033[y;xH设置光标位置 printf(“\033[%d;%dH”, (x), (y))
\033[2J清屏
\033[K清除从光标到行尾的内容
\033[s保存光标位置
\033[u恢复光标位置
\033[?25l隐藏光标
\033[?25h显示光标

显示光标

前景色和背景色对应的数字

颜色背景色背景色加亮前景色前景色加亮
黑401003090
红411013191
绿421023292
黄431033393
蓝441043494
紫451053595
靛蓝461063696
白471073797

使用echo命令进行测试

可以使用echo命令对格式字符串进行测试

例如:

Terminal window
echo -e "\033[41;36m 一段文字 \033[0m"

这里先把控制台的背景色设置为红色(41),文字的颜色设置为靛蓝色(36),打印一段文字后,关闭了所有设置(还原到默认状态下)

output

测试不同的前景色

test-foregroud-color

C语言控制颜色和输出#

#include <stdio.h>
#include <unistd.h>
// 清除屏幕
#define CLEAR() printf("\033[2J")
// 上移光标
#define MOVEUP(x) printf("\033[%dA", (x))
// 下移光标
#define MOVEDOWN(x) printf("\033[%dB", (x))
// 左移光标
#define MOVELEFT(y) printf("\033[%dD", (y))
// 右移光标
#define MOVERIGHT(y) printf("\033[%dC",(y))
// 定位光标
#define MOVETO(x,y) printf("\033[%d;%dH", (x), (y))
// 光标复位
#define RESET_CURSOR() printf("\033[H")
// 隐藏光标
#define HIDE_CURSOR() printf("\033[?25l")
// 显示光标
#define SHOW_CURSOR() printf("\033[?25h")
//反显
#define HIGHT_LIGHT() printf("\033[7m")
#define UN_HIGHT_LIGHT() printf("\033[27m")
int main(int argc,char **argv)
{
// 颜色
printf("\033[31mThe color,%s!\033[1m\n","haha");
printf("\033[31mThe color,%s!\033[4m\n","haha");
printf("\033[31mThe color,%s!\033[5m\n","haha");
printf("\033[31mThe color,%s!\033[7m\n","haha");
printf("\033[31mThe color,%s!\033[8m\n","haha");
printf("\033[31mThe color,%s!\033[0m\n","haha");
printf("\033[47;31mThe color,%s!\033[0m\n","haha");
printf("\033[47mThe color,%s!\033[0m\n","haha");
// 光标
sleep(2);
printf("\033[47m%s!\033[5A\n","up 5");
sleep(2);
printf("\033[47m%s!\033[9B\n","down 9");
sleep(2);
printf("\033[47m%s!\033[19C\n","right 19");
printf("right19");
sleep(2);
printf("\033[47m%s!\033[10D\n","left 10");
printf("left 10");
sleep(2);
printf("\033[47m%s!\033[50;20H\n","move to y:50,x 20");
printf("y50 x 20");
sleep(2);
printf("\033[47m%s!\033[?25l\n","hide cursor");
sleep(2);
printf("\033[47m%s!\033[?25h\n","sow cursor");
sleep(2);
printf("\033[47m%s!\033[2J\n","clear scleen");
sleep(2);
return 0;
}

Reference#

【1】https://www.cnblogs.com/sunhaixian/p/16528087.html

【2】https://blog.csdn.net/kevinshq/article/details/8179252

ASCII输出光标和颜色
https://tuoyuangui.github.io/website/posts/typora/gnu语言/ascii控制输出光标和颜色/
作者
椭圆规/tuoyuangui
发布于
2025-09-12
许可协议
CC BY-NC-SA 4.0