先举个例子:
#include <iostream>
int main()
{
std::cout<<"\033[33mHello \033[34mworld!\033[0m"<<std::endl;
return 0;
}
执行以上代码,你将会看到红色的Hello和蓝色的world!
观察上述代码,你会发现我用了三个\033[*m
这就是Linux输出彩色字体的关键
下表就是每个类似的字符串所代表的意思 (此表转自此处)
\033[0m 关闭所有属性
\033[1m 高亮
\033[2m 亮度减半
\033[3m 斜体
\033[4m 下划线
\033[5m 闪烁
\033[6m 快闪
\033[7m 反显
\033[8m 消隐
\033[9m 中间一道横线
10-19 关于字体的
21-29 基本与1-9正好相反
30-37 设置前景色
40-47 设置背景色
30:黑
31:红
32:绿
33:黄
34:蓝
35:紫
36:深
37:白
38 打开下划线,设置默认前景色
39 关闭下划线,设置默认前景色
40 黑色背景
41 红色背景
42 绿色背景
43 棕色背景
44 蓝色背景
45 品红背景
46 孔雀蓝背景
47 白色背景
48 不知道什么东西
49 设置默认背景色
50-89 没用
90-109 又是设置前景背景的,比之前的颜色浅
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
根据上表,就可以写一个函数,做到切换各种颜色
代码如下 (只支持一些常用的颜色)
//color.h
#ifndef SETCOLOR_H
#define SETCOLOR_H
const int F_BLACK = 0x01 // 000001
const int F_RED = 0x02 // 000010
const int F_GREEN = 0x03 // 000011
const int F_YELLOW = 0x04 // 000100
const int F_BLUE = 0x05 // 000101
const int F_DPURPLE = 0x06 // 000110
const int F_WHITE = 0x07 // 000111
const int B_BLACK = 0x08 // 001000
const int B_RED = 0x10 // 010000
const int B_GREEN = 0x18 // 011000
const int B_BROWN = 0x80 // 100000
const int B_BLUE = 0x88 // 101000
const int B_WHITE = 0x90 // 110000
//缺一个111000,但就这些了
bool setColor(int color); // color是一个前景色于一个后景色的位或结果
void resetFColor(); // 重置前景色
void resetBColor(); // 重置背景色
#endif // SETCOLOR_H
//color.cpp
#include "color.h"
#include <iostream>
bool setColor(int color)
{
bool ret = true;
int fore = color%8; //取color的后3位
int back = (color/8)*8; //将color的后3位清空 (即取前3位)
switch (fore)
{
case F_BLACK:std::cout<<"\033[30m";break;
case F_RED:std::cout<<"\033[31m";break;
case F_GREEN:std::cout<<"\033[32m";break;
case F_YELLOW:std::cout<<"\033[33m";break;
case F_BLUE:std::cout<<"\033[34m";break;
case F_PURPLE:std::cout<<"\033[35m";break;
case F_WHITE:std::cout<<"\033[37m";break;
default:ret = false;
}
switch (back)
{
case B_BLACK:std::cout<<"\033[40m";break;
case B_RED:std::cout<<"\033[41m";break;
case B_GREEN:std::cout<<"\033[42m";break;
case B_BROWN:std::cout<<"\033[43m";break;
case B_BLUE:std::cout<<"\033[44m";break;
case B_WHITE:std::cout<<"\033[47m";break;
default:ret = false;
}
return ret;
}
void resetFColor()
{std::cout<<"\033[39m";}
void resetBColor()
{std::cout<<"\033[49m";}
注:本段代码未经测试,可能会有错误,请谅解!
最后,我们来编译一下这个文件不会手动编译的朋友们注意了
使用指令$ sudo apt-get install gcc g++来安装C和C++ (没有用Ubuntu的朋友们百度找找C和C++的编译器吧)
进入那两个文件存放的目录
使用指令$ g++ -c -o test.o test.cpp来生成目标文件 (假设那两个文件名为test.h和test.cpp)
使用指令$ gcc -fPIC -shared test.o来生成动态链接库
使用指令$ ar rcs -o libtest.a test.so来生成静态库 (ar在安装gcc和g++时已经安装好)
如果你编辑好了main函数放在main.cpp里,则可以进行后两步
使用指令g++ -c -o main.o main.cpp生成目标文件
如果你使用动态链接库,使用指令gcc -o main -L. -ltest main.cpp生成main (libtest.so必须放在main的所在目录下,否则main.exe失效)
如果你使用静态库,使用指令gcc -o main main.o libtest.a生成main (libtest.a不一定一直放在main的所在目录下,因为main不依赖)
---------------------
作者:iptracker
来源:CSDN
原文:https://blog.csdn.net/qq_42876636/article/details/82960511
版权声明:本文为博主原创文章,转载请附上博文链接!