在 Go 中,如何将 []myByte 转换为 []byte?

我有一个type myByte byte我使用的,因为我想在逻辑上区分不同类型的字节。


我可以轻松转换byte(myByte(1)),


但我找不到投射或转换切片:[]byte([]myByte{1})失败。


这样的事情可能吗?内存中的位是相同的(对吧?)所以应该有某种方式,而不是逐字节复制到一个新对象中。


例如,这些都不起作用:http : //play.golang.org/p/WPhD3KufR8


package main


type myByte byte


func main() {

a := []myByte{1}


fmt.Print(byte(myByte(1))) // Works OK


fmt.Print([]byte([]myByte{1})) // Fails: cannot convert []myByte literal (type []myByte) to type []byte


// cannot use a (type []myByte) as type []byte in function argument

// fmt.Print(bytes.Equal(a, b))


// cannot convert a (type []myByte) to type []byte

// []byte(a)


// panic: interface conversion: interface is []main.myByte, not []uint8

// abyte := (interface{}(a)).([]byte)

}


吃鸡游戏
浏览 289回答 2
2回答

蝴蝶不菲

您不能将自己的 myByte 切片转换为字节切片。但是您可以拥有自己的字节切片类型,该类型可以转换为字节切片:package mainimport "fmt"type myBytes []bytefunc main() {     var bs []byte     bs = []byte(myBytes{1, 2, 3})     fmt.Println(bs)}根据您的问题,这可能是一个不错的解决方案。(您无法将字节与 myBytes 与字节区分开来,但您的切片是类型安全的。)

互换的青春

显然,没有办法,解决方案只是遍历整个切片,转换每个元素并复制到新切片或将类型转换“下推”到每个元素的操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go