这包含在规范:转换:与字符串类型之间的转换: https://golang.org/ref/spec#Conversions
将有符号或无符号整数值转换为字符串类型会生成一个包含该整数的 UTF-8 表示形式的字符串。有效 Unicode 代码点范围之外的值将转换为"\uFFFD"
.
当您将数值转换为时非常有效string
,它只能产生一个string
有一个rune
(特点)。自从 Go 商店strings
作为内存中的 UTF-8 编码字节序列,这就是如果您将您的string
to []byte
:
将字符串类型的值转换为字节类型的切片会生成一个切片,其连续元素是字符串的字节。
当您尝试转换0x12345678
, 0x10000000
and 0x20000000
价值观string
,因为它们超出了有效 Unicode 代码点的范围,根据规范它们被转换为"\uFFFD"
在 UTF-8 编码中是[]byte{239, 191, 189}
;当编码为十六进制字符串时:
fmt.Println(hex.EncodeToString([]byte("\uFFFD"))) // Output: efbfbd
或者简单地:
fmt.Printf("%x", "\uFFFD") // Output: efbfbd
阅读博客文章Go 中的字符串、字节、符文和字符 https://blog.golang.org/strings有关更多详细信息string
内部结构。
顺便说一句,从 Go 1.5 开始,Go 运行时(大部分)是在 Go 中实现的,因此这些转换现在是在 Go 中实现的,可以在runtime https://golang.org/pkg/runtime/包裹:runtime/string.go https://golang.org/src/runtime/string.go,寻找intstring()
功能。