Go 将'byte'数组转换为'uint32'数组

Go 将'byte'数组转换为'uint32'数组,go,Go,我想使用byte数组作为uint32数组,然后获取uint32数组的第一个元素。但是我不能让下面的代码工作。有人能告诉我如何将字节数组转换为单元32数组吗?谢谢 // vim: set noexpandtab tabstop=2: package main import ( "unsafe" "fmt" ) func main() { x := []byte{'\x01', '\x02', '\x03', '\x04', '\

我想使用
byte
数组作为
uint32
数组,然后获取uint32数组的第一个元素。但是我不能让下面的代码工作。有人能告诉我如何将
字节
数组转换为
单元32
数组吗?谢谢

// vim: set noexpandtab tabstop=2:

package main

import (
    "unsafe"
    "fmt"
)

func main() {
    x := []byte{'\x01', '\x02', '\x03', '\x04', '\x06', '\x07', '\x08', '\x09'}
    fmt.Printf("%#v\n", x)
    fmt.Printf("%#v\n", []int32(unsafe.Pointer(x))[0])
}
是的

fmt.Printf("%#v\n", (*(*[]int32)(unsafe.Pointer(&x)))[0])
但人们应该记住,它仍然会有
len=cap=8
(*),并仔细检查边界本身

表达澄清

unsafe.Pointer(&x) // an uintptr to an `x` slice

(*[]int32)(...) // a type conversion
                // it's the same syntax when you do float64(42)
                // but in this case you need extra parentheses around the
                // type name to make it unambiguous for the parser
                // so, it converts a unitptr to a pointer to a int32 slice

*(...) // here it's just a pointer dereference. So you obtain a slice
       // from a pointer to a slice, to index it after

(*)
cap
在这种特殊情况下不能保证
8
(但这并不重要)。

您到底需要做什么?要将8个字节转换为2
uint32
s?endianness呢?这能回答你的问题吗?Endian与主机相同。你指的链接不是我要找的。我想强制转换指针,以便可以直接访问强制转换的数组。我不想调用函数来访问uint32的每个元素。不要使用不安全的包。一个简单的(x[0]@user1424739:您根本没有访问“数组”,您只是在操作片头。如果您想直接访问内存,首先必须指向正确的内存。我对
(*(*[]int32)(不安全的.Pointer(&x))
的语法感到困惑。您能帮助我理解它吗?
(*[]int32)(…)
-此部分是类型转换,与
int(42)
的方式相同。前面的
*
是取消对指针的引用。