golang string 到 rune 发生了什么

string  本质是个byte数组

rune   是个int32的别名

package main

import (
	"fmt"
	"reflect"
	"unsafe"
)

func main() {
	s := "A你好B"
	sh := (*reflect.StringHeader)(unsafe.Pointer(&s))

	b := (*[8]byte)(unsafe.Pointer(sh.Data))
	fmt.Printf("%08b\n", b)

	bsx := []rune(s)
	bsxh := (*reflect.SliceHeader)(unsafe.Pointer(&bsx))
	y1 := (*[4]rune)(unsafe.Pointer(bsxh.Data))
	fmt.Printf("%032b\n", y1)
	y2 := (*[16]byte)(unsafe.Pointer(bsxh.Data))
	fmt.Printf("%08b\n", y2)
}

  

结果

 根据utf-8编码规则

分析一下

可以看出string在转rune的时候,是根据utf-8编码转去掉规则标志位后连接组成的二进制数,按int32内存分布规则重新分布

转载于:https://www.cnblogs.com/adarking/p/8628789.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值