Go 语言中的十六进制数字

层叠样式表(CSS)通过十六进制数字而不是十进制数字来指定颜色。 与十进制只使用 10 个数字相比, 十六进制需要多用 6 个数字: 其中前 10 个数字跟十进制一样, 都是 0~9, 但是之后的 6 个 数字是十六进制数字 A ~ F 。 十六进制中的 A 相当于十进制中的 10B 相当于 11 , 以此类推, 直到相当于 15F 为止。

十进制对拥有十根手指的人类来说是一种非常棒的数字系统, 但与之相比, 十六进制更适合计算机。 这是因为一个十六进制数字需要消耗 4 个二进制位, 也就是半字节(nibble), 而 2 个十六进制数字则正好需要消耗 8 个二进制位, 也就是 1 字节, 这也使得十六进制可以非常方便地为 uint8 设置值。

下表展示了一些十六进制数字以及与之对应的十进制数字。


../_images/hex.png

为了区分十进制数字和十六进制数字, 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; ”

Note

本文摘录自《Go语言趣学指南》第 7 章, 请访问 gpwgcn.com 以获取更多相关信息。

../_images/gpwgcn1.jpg