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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.