[note] C语言控制终端,缘何使用“\033[m”
来源:互联网 发布:国内大学人工智能 编辑:程序博客网 时间:2024/05/31 19:35
C语言控制终端文字颜色,使用的比较多的是这样一条命令:
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语言实例–控制终端字符颜色) http://blog.csdn.net/talk_8/article/details/51764795
2. Linux终端和win32控制台文本颜色输出 http://www.cnblogs.com/crabxx/p/4046498.html
3. ECMA-48 标准 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
- [note] C语言控制终端,缘何使用“\033[m”
- 使用终端编译C语言程序
- C语言控制Linux终端的颜色输出
- 383. Ransom Note(C语言)
- c语言函数---M
- mac终端 运行c语言
- C语言函数M字母
- m序列c语言实现
- 缘何?
- 一起talk C栗子吧(第一百六十七回:C语言实例--控制终端字符颜色)
- Linux C 函数参考(环境变量,终端控制)
- Linux 常用C函数(终端控制篇)
- Linux 常用C函数(终端控制篇)
- c语言第一天 终端的使用 .c .o .out 文件的解释 快捷键等
- C语言流程控制
- C语言控制结构
- C语言控制结构
- C语言控制流
- group by的使用
- 用Javascript获取页面元素的位置
- SQL Server中服务器角色和数据库角色权限详解
- IE兼容性问题总结(项目中遇到的)
- Retrofit之表单提交、多文件上传
- [note] C语言控制终端,缘何使用“\033[m”
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- 2016.7.7初中部模拟赛总结
- C# 对键值对的键或者值进行排序
- Android 自带的一些系统查询用URI
- Hadoop源代码分析
- 莫比乌斯反演
- Android Studio多渠道打包和代码混淆教程
- .htaccess:正则表达式、重定向代码