为什么 fmt.Printf("%x", 'ᚵ') ~> 16b5,而 fmt.Printf("%x", "ᚵ") ~> e19ab5?
Why does fmt.Printf("%x", 'ᚵ') ~> 16b5, while fmt.Printf("%x", "ᚵ") ~> e19ab5?
package main
import (
"fmt"
)
func main() {
fmt.Printf("%c, %x, %x", 'ᚵ', 'ᚵ', "ᚵ")
}
输出:
ᚵ, 16b5, e19ab5
因为每个人做的事情都不一样。两者都将参数格式设置为十六进制数,但各自对参数的看法不同。
fmt.Printf("%x", 'ᚵ')
以 32 位整数 (int32) 的形式打印单个 unicode 字符(符文,如果你愿意的话)。
fmt.Printf("%x", "ᚵ")
将字符串(字符串的各个字节)打印为 8 位整数 (uint8)。当使用 utf-8 编码时,符文被编码为三个字节。这就是为什么有六个十六进制数字(每个字节两个)的原因。
要详细研究字符串的打印,请从文件 fmt/print.go
中的函数 fmtString
开始。
func (p *pp) fmtString(v string, verb rune) {
package main
import (
"fmt"
)
func main() {
fmt.Printf("%c, %x, %x", 'ᚵ', 'ᚵ', "ᚵ")
}
输出:
ᚵ, 16b5, e19ab5
因为每个人做的事情都不一样。两者都将参数格式设置为十六进制数,但各自对参数的看法不同。
fmt.Printf("%x", 'ᚵ')
以 32 位整数 (int32) 的形式打印单个 unicode 字符(符文,如果你愿意的话)。
fmt.Printf("%x", "ᚵ")
将字符串(字符串的各个字节)打印为 8 位整数 (uint8)。当使用 utf-8 编码时,符文被编码为三个字节。这就是为什么有六个十六进制数字(每个字节两个)的原因。
要详细研究字符串的打印,请从文件 fmt/print.go
中的函数 fmtString
开始。
func (p *pp) fmtString(v string, verb rune) {