[note] C语言控制终端,缘何使用“\033[m”
2016-07-07 16:57
465 查看
C语言控制终端文字颜色,使用的比较多的是这样一条命令:
不免好奇,这个格式是如何来的?
作为C语言的使用者,从习惯上也不太喜欢\033这种写法啊,换成\x1B如何?
上面的语句,即使写成
在我的电脑上也是起作用的,为何不写\e却要记忆那个\033,难道因为\033好记?(或许比\x1B好记)我想这不太可能吧
ECMA是European Computer Manufacturers Association,而这个标准也是 ISO/IEC 6429。
先看一眼 5.4 Control sequences (Page 10), 这里是基本格式
8.3.117 SGR - SELECT GRAPHIC RENDITION (Page 61)
中给出了我们用的这条指令的详细格式 CSI Ps… 06/13
首先 \e 或者 \033 或者 \x1B 作为起始字符,起始都是一个意思
CSI 就是那个[,可以再5.3节的表 05/11 找到
Ps… 的指令是我们要执行的比如颜色、高亮、加粗、闪烁等等
最后的06/13就是结束符m了。
之所以会写成\033,个人认为源于POSIX标准的echo只支持 \0NNN 的写法。
如果直接在bash下执行
这个是没有问题的(-e表示需要转换escape sequence,否则将会把\原样打出来)
但是如果在dash下执行(很多系统的默认sh重定向)
则必须使用
因为\e和\xHH是GNU的标准,POSIX里面只支持\0NNN,所以为了兼容性,大家就都用\033吧
参考资料:
1. 一起talk C栗子吧(第一百六十七回:C语言实例–控制终端字符颜色) /article/11896207.html
2. Linux终端和win32控制台文本颜色输出 /article/7046139.html
3. ECMA-48 标准 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
printf("\033[1;30;47m hello word \033[m \n");
不免好奇,这个格式是如何来的?
作为C语言的使用者,从习惯上也不太喜欢\033这种写法啊,换成\x1B如何?
上面的语句,即使写成
printf("\e[1;30;47m hello word \e[m \n");
在我的电脑上也是起作用的,为何不写\e却要记忆那个\033,难道因为\033好记?(或许比\x1B好记)我想这不太可能吧
一、这个格式是怎么来的?
ECMA-48 标准 《Control Functions for Coded Character Sets 》ECMA是European Computer Manufacturers Association,而这个标准也是 ISO/IEC 6429。
先看一眼 5.4 Control sequences (Page 10), 这里是基本格式
8.3.117 SGR - SELECT GRAPHIC RENDITION (Page 61)
中给出了我们用的这条指令的详细格式 CSI Ps… 06/13
首先 \e 或者 \033 或者 \x1B 作为起始字符,起始都是一个意思
CSI 就是那个[,可以再5.3节的表 05/11 找到
Ps… 的指令是我们要执行的比如颜色、高亮、加粗、闪烁等等
最后的06/13就是结束符m了。
为何要写成\033,换成\x1B如何?
对于C语言来说,其实都是一样的,因为编译器会把这些代码解释成相同的字符。之所以会写成\033,个人认为源于POSIX标准的echo只支持 \0NNN 的写法。
如果直接在bash下执行
echo -e "\e[1;30;47m hello word \e[m \n"
这个是没有问题的(-e表示需要转换escape sequence,否则将会把\原样打出来)
但是如果在dash下执行(很多系统的默认sh重定向)
则必须使用
echo "\033[1;30;47m hello word \033[m \n"
因为\e和\xHH是GNU的标准,POSIX里面只支持\0NNN,所以为了兼容性,大家就都用\033吧
参考资料:
1. 一起talk C栗子吧(第一百六十七回:C语言实例–控制终端字符颜色) /article/11896207.html
2. Linux终端和win32控制台文本颜色输出 /article/7046139.html
3. ECMA-48 标准 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
相关文章推荐
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
- java 层调用Jni(Ndk) 持久化c c++ 对象
- POJ1001(C++处理大数)
- 设计模式(14)-Flyweight Pattern
- C++类构造函数,拷贝构造函数,赋值函数,析构函数几点注意
- c++——const
- 开始学习算法导论
- 数组引用:C++ 数组做参数 深入分析
- C++继承与派生
- 【c++程序】指针数组与数组指针
- c++——static关键字
- MFC使用ADO链接ACCESS的环境部署与注意事项
- C++经典面试问题20-40
- C++ 关于声明,定义,类的定义,头文件作用,内、外链接
- MFC学习笔记2_消息映射
- 【C++】类模板(template)作用对比举例
- C++模板
- LeetCode 209: Minimum Size Subarray Sum
- JNI官方规范中文版——如何在JNI中使用己有的C/C++库
- 抽空写的网站抓图片c++,增加了简单的多线程和互斥