梦里花落0921
您可以执行C语言中的操作,但有一个例外-Go不允许从一种指针类型转换为另一种指针类型。可以,但是您必须使用unsafe.Pointer告诉编译器您知道所有规则均已违反,并且您知道自己在做什么。这是一个例子:package mainimport ( "fmt" "unsafe")func main() { b := []byte{1, 0, 0, 0, 2, 0, 0, 0} // step by step pb := &b[0] // to pointer to the first byte of b up := unsafe.Pointer(pb) // to *special* unsafe.Pointer, it can be converted to any pointer pi := (*[2]uint32)(up) // to pointer to the first uint32 of array of 2 uint32s i := (*pi)[:] // creates slice to our array of 2 uint32s (optional step) fmt.Printf("b=%v i=%v\n", b, i) // all in one go p := (*[2]uint32)(unsafe.Pointer(&b[0])) fmt.Printf("b=%v p=%v\n", b, p)}显然,您应该谨慎使用“不安全”软件包,因为Go编译器不再握紧您的手-例如,您可以pi := (*[3]uint32)(up)在此处编写,并且编译器不会抱怨,但是您会遇到麻烦。而且,正如其他人已经指出的那样,uint32的字节在不同计算机上的布局可能有所不同,因此您不应假定它们是所需的布局。最安全的方法是一一读取字节数组,然后从中取出所需的任何内容。