Go 语言中的十六进制数字¶
层叠样式表(CSS)通过十六进制数字而不是十进制数字来指定颜色。
与十进制只使用 10 个数字相比,
十六进制需要多用 6 个数字:
其中前 10 个数字跟十进制一样,
都是 0~9,
但是之后的 6 个 数字是十六进制数字 A ~ F 。
十六进制中的 A 相当于十进制中的 10 ,
B 相当于 11 ,
以此类推,
直到相当于 15 的 F 为止。
十进制对拥有十根手指的人类来说是一种非常棒的数字系统,
但与之相比,
十六进制更适合计算机。
这是因为一个十六进制数字需要消耗 4 个二进制位,
也就是半字节(nibble),
而 2 个十六进制数字则正好需要消耗 8 个二进制位,
也就是 1 字节,
这也使得十六进制可以非常方便地为 uint8 设置值。
下表展示了一些十六进制数字以及与之对应的十进制数字。
为了区分十进制数字和十六进制数字,
Go 语言要求十六进制数字必须带有 0x 前缀。
作为例子,
以下两行代码分别用十进制数字和十六进制数字定义了完全相同的 3 个变量:
var red, green, blue uint8 = 0, 141, 213
var red, green, blue uint8 = 0x00, 0x8d, 0xd5
在使用 Printf 函数打印十六进制数字的时候,
你可以使用 %x 或者 %X 作为格式化变量:
fmt.Printf("%x %x %x", red, green, blue) // 打印出 “08dd5”
为了输出能够完美适配层叠样式表文件的颜色的数字,
我们需要用到格式化变量 %02x 。
它跟之前介绍过的格式化变量 %v 和 %f 一样,
通过数字 2 指定了格式化输出的最小数字数量,
并通过数字 0 启用了格式化的零填充功能:
fmt.Printf("color: #%02x%02x%02x;", red, green, blue) // 打印出 “color: #008dd5; ”
