在 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
的十六进制表示打印它作为别名的数字的十六进制表示 (rune
是 int32
).
的别名
Go 中的 和 string
s 保存文本的 UTF-8 编码字节序列。在 UTF-8 表示中,数字代码 > 127 的字符(符文)具有 multi-byte 表示。
rune
Э
在UTF-8中有multi-byte表示(即[208, 173]
),与multi-byte表示不同32 位整数 1069 = 0x42d
。整数在内存中使用 two's complement 表示。
为什么十六进制格式的西里尔字符串与十六进制格式的西里尔字符不同?
str := "Э"
fmt.Printf("%x\n", str)
//result d0ad
str := 'Э'
fmt.Printf("%x\n", str)
//result 42d
打印 string
的十六进制表示打印其字节的十六进制表示,打印 rune
的十六进制表示打印它作为别名的数字的十六进制表示 (rune
是 int32
).
和 string
s 保存文本的 UTF-8 编码字节序列。在 UTF-8 表示中,数字代码 > 127 的字符(符文)具有 multi-byte 表示。
rune
Э
在UTF-8中有multi-byte表示(即[208, 173]
),与multi-byte表示不同32 位整数 1069 = 0x42d
。整数在内存中使用 two's complement 表示。