[Go 编程语言] [golang] 使用 unsafe 转换 int 为 byte 切片,在通过打印读 byte 切片时数据发生变化

func main() { n := 1 nbytes := i2bin(n) for i := 0; i < len(nbytes); i++ { fmt.Printf("value: %v,addr: %p", nbytes[i], &nbytes[i]) }
} func i2bin(i int) []byte { sh := &reflect.SliceHeader{Len: 8, Cap: 8, Data: uintptr(unsafe.Pointer(&i))} return *(*[]byte)(unsafe.Pointer(sh))
}

如题,转换完成后数据是正常的为:
[0]:0x1
[1]:0x0
[2]:0x0
[3]:0x0
[4]:0x0
[5]:0x0
[6]:0x0
[7]:0x0

进入循环,第一次打印数组结束数据就变成了:
[0]:0x9
[1]:0x10
[2]:0xa3
[3]:0x0
[4]:0x0
[5]:0x0
[6]:0x0
[7]:0x0

为什么会发生变化呢?

golang: v1.18.3 windows

发表评论

您的电子邮箱地址不会被公开。