<返回更多

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

2023-04-17  今日头条  编程牛
加入收藏

这篇开始记录整数的格式化处理,首先学习下%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)
//输出:    中
  1. %c处理整数,本质是将UTF-16=>UTF-8
  2. %c只关注宽度,精度被忽略。(根据源码无精度的任何处理)
  3. 对齐可以填充0或者默认的空格
  4. 不支持#、+等其它含义的各种标记
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>