这篇开始记录整数的格式化处理,首先学习下%c格式
文章插图
可以看到,参数是Unicode编码或字符 。我们知道,字符实质是一个整数,如果用Unicode编码,一般指的是UTF-16 。
fmt.Printf("%cn",'中')//或者fmt.Printf("%cn",0x4E2D)
两种样式是一样的,本质都是一个数 。那么当用%c是如何处理这个整数呢?%c
文章插图
%c实际调用的是fmtC方法,主要有三个部分:
1
如果整数太大,超出Unicode的编码范围,会将r置为'uFFFD' 。有关Unicode的编码这里暂时不探讨了,需要知道的是Unicode有一个最大范围为'u0010FFFF',大约111,4111个码点,因此传过去的整数不能大于此值
2
使用utf8.EncodeRune函数将此Unicode转换为utf8,概括说就是UTF-16=>UTF-8,这是%c的主要作用 。
3
将转换结果写入buf,下面看pad的操作 。
pad(b []byte)
文章插图
1
如果宽度不存在或为0,直接写入
2
宽度- Rune得到需要填充的空白符(数) 。从这可以看出,%c强调字符(个数)
3
根据左或右对齐,分别执行填充和写入操作 。其中执行了一个writePadding方法,这个在下篇中进行记录,它还有一些问题 。
%c处理整数总结
fmt.Printf("%05.2cn", 0x4E2D)//输出:0000中//或者fmt.Printf("%5.0cn", 0x4E2D)//输出:中
- %c处理整数,本质是将UTF-16=>UTF-8
- %c只关注宽度,精度被忽略 。(根据源码无精度的任何处理)
- 对齐可以填充0或者默认的空格
- 不支持#、+等其它含义的各种标记
【Go开发 fmt彻底研究 - %c处理整数】
推荐阅读
- 一款基于开源框架实现的脚手架平台,帮助中小企业快速迭代开发
- Google称内部全在用Kotlin搞安卓开发,体验碾压Java
- 青苔|想钓大板鲫就别总抢老钓位!开发新位置才能钓过瘾
- |赵丽颖新剧将启,转型彻底,网传男主也是首次合作,演技在线
- 张继科|高圆圆人设彻底崩了?被曝开放式婚姻
- 高圆圆|高圆圆人设彻底崩了?被曝开放式婚姻
- 13个每个 Web 开发人员都必须知道的基本 JavaScript 函数
- Flink总结之一文彻底搞懂处理函数
- 养老金到底应该怎么算?这次给你彻底说明白
- 重庆|彻底失控!因张继科事件牵扯的女明星已多达6位,人数还有上涨趋势