在 Go 中以十六进制打印字符串和字符

Printing strings and characters as hexadecimal in Go

为什么十六进制格式的西里尔字符串与十六进制格式的西里尔字符不同?

str  := "Э"
fmt.Printf("%x\n", str)
//result d0ad
    
str  := 'Э'
fmt.Printf("%x\n", str)
//result 42d

打印 string 的十六进制表示打印其字节的十六进制表示,打印 rune 的十六进制表示打印它作为别名的数字的十六进制表示 (runeint32).

的别名 Go 中的

strings 保存文本的 UTF-8 编码字节序列。在 UTF-8 表示中,数字代码 > 127 的字符(符文)具有 multi-byte 表示。

runeЭ在UTF-8中有multi-byte表示(即[208, 173]),与multi-byte表示不同32 位整数 1069 = 0x42d。整数在内存中使用 two's complement 表示。

推荐博客post:Strings, bytes, runes and characters in Go