这篇开始记录整数的格式化处理,首先学习下%c
可以看到,参数是Unicode编码或字符。我们知道,字符实质是一个整数,如果用Unicode编码,一般指的是UTF-16。
fmt.Printf("%cn",'中')
//或者
fmt.Printf("%cn",0x4E2D)
两种样式是一样的,本质都是一个数。那么当用%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的操作。
1
如果宽度不存在或为0,直接写入
2
宽度- Rune得到需要填充的空白符(数)。从这可以看出,%c强调字符(个数)
3
根据左或右对齐,分别执行填充和写入操作。其中执行了一个writePadding方法,这个在下篇中进行记录,它还有一些问题。
fmt.Printf("%05.2cn", 0x4E2D)
//输出:0000中
//或者
fmt.Printf("%5.0cn", 0x4E2D)
//输出: 中