为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
吃鸡游戏 2021-06-18 18:04:57
我有一个type myByte byte我使用的,因为我想在逻辑上区分不同类型的字节。我可以轻松转换byte(myByte(1)),但我找不到投射或转换切片:[]byte([]myByte{1})失败。这样的事情可能吗?内存中的位是相同的(对吧?)所以应该有某种方式,而不是逐字节复制到一个新对象中。例如,这些都不起作用:http : //play.golang.org/p/WPhD3KufR8package maintype myByte bytefunc main() {a := []myByte{1}fmt.Print(byte(myByte(1))) // Works OKfmt.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)}
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您不能将自己的 myByte 切片转换为字节切片。


但是您可以拥有自己的字节切片类型,该类型可以转换为字节切片:


package main


import "fmt"


type myBytes []byte


func main() {

     var bs []byte

     bs = []byte(myBytes{1, 2, 3})

     fmt.Println(bs)

}

根据您的问题,这可能是一个不错的解决方案。(您无法将字节与 myBytes 与字节区分开来,但您的切片是类型安全的。)


查看完整回答
反对 回复 2021-06-21
?
互换的青春

TA贡献1797条经验 获得超6个赞

显然,没有办法,解决方案只是遍历整个切片,转换每个元素并复制到新切片或将类型转换“下推”到每个元素的操作。



查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信