Go 语言中的十六进制数字
2015 年 7 月 1 日
层叠样式表(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; ”