是否可以将某个值的指针转换为分片?例如,我想从单字节读取io.Reader到uint8变量。io.Reader.Read接受一个slice作为其参数,所以我不能像在C中那样简单地为其提供一个指向变量的指针。我认为从指针创建长度为1,容量为1的切片是安全的操作。显然,它应该与从长度为1的数组创建切片相同,这是允许的操作。有没有简单的方法可以用普通变量做到这一点?或者,也许我听不懂某事,并且有某些原因为什么要禁止这样做?
3 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
切片不仅是指针,就像C中的数组一样。它还包含数据的长度和容量,如下所示:
struct {
ptr *uint8
len int
cap int
}
因此,是的,您将需要创建一个切片。创建切片的最简单方法var a uint8是[]uint8{a}
a := uint8(42)
fmt.Printf("%#v\n", []uint8{a})
(但是在重读您的问题之后,这并不是全部的解决方案)
但是,如果您希望从变量创建切片,并指向相同的内存空间,则可以使用该unsafe包。不建议这样做。
fmt.Printf("%#v\n", (*[1]uint8)(unsafe.Pointer(&a))[:] )
- 3 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消