Go开发 fmt彻底研究 - %c处理整数

这篇开始记录整数的格式化处理,首先学习下%c
格式
Go开发 fmt彻底研究 - %c处理整数

文章插图
 
可以看到,参数是Unicode编码或字符 。我们知道,字符实质是一个整数,如果用Unicode编码,一般指的是UTF-16 。
fmt.Printf("%cn",'中')//或者fmt.Printf("%cn",0x4E2D)两种样式是一样的,本质都是一个数 。那么当用%c是如何处理这个整数呢?
%c
Go开发 fmt彻底研究 - %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)
Go开发 fmt彻底研究 - %c处理整数

文章插图
 
1
如果宽度不存在或为0,直接写入
2
宽度- Rune得到需要填充的空白符(数) 。从这可以看出,%c强调字符(个数)
3
根据左或右对齐,分别执行填充和写入操作 。其中执行了一个writePadding方法,这个在下篇中进行记录,它还有一些问题 。
%c处理整数总结fmt.Printf("%05.2cn", 0x4E2D)//输出:0000中//或者fmt.Printf("%5.0cn", 0x4E2D)//输出:中
  1. %c处理整数,本质是将UTF-16=>UTF-8
  2. %c只关注宽度,精度被忽略 。(根据源码无精度的任何处理)
  3. 对齐可以填充0或者默认的空格
  4. 不支持#、+等其它含义的各种标记

【Go开发 fmt彻底研究 - %c处理整数】


    推荐阅读