当前位置: 首页 > 面试题库 >

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

丌官开宇
2023-03-14
问题内容

我有一个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)
}

问题答案:

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

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

package main

import "fmt"

type myBytes []byte

func main() {
     var bs []byte
     bs = []byte(myBytes{1, 2, 3})
     fmt.Println(bs)
}

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



 类似资料:
  • 问题内容: 在围棋,什么是转换的最佳策略来?我很难比较两者 在下一行 问题答案: 您将其转换为类型“转换” 比较值时,您始终希望将较小的类型转换为较大的类型。转换为其他方式可能会截断该值: 或者,将 值转换为,可以使用 如果系统上类型的最大值溢出,则将无法正确执行。

  • 问题内容: 如何将go的类型从uint8转换为unit32? 只需代码: 〜> 6g test.go && 6l -o test test.6 && ./test test.go:10:无法将uInt8(类型[] uint8)转换为uint32类型 问题答案: 输出: Go 二进制包功能通过一系列移位实现。

  • 问题内容: 我有一个大小字节数组,做完之后。 我得到错误: 无法将b(类型[16] byte)转换为字符串类型 问题答案: 您可以将其称为切片:

  • 问题内容: 目前,我目前正在处理一些代码,其中涉及类型为var的 它具有价值,我可以像这样轻松访问: 很好,但是我希望能够使用该 函数,由于它需要type 而不是type ,因此通常会出错。 可以使用该功能的最合适的解决方案是什么,我想也许是某种转换方法? 问题答案: 您需要构造一个新的type数组才能使用: 请参阅相关的Golang常见问题解答条目:我可以将[] T转换为[]接口{}吗?

  • 问题内容: 如何在Go中将float64转换为int?我知道该包可用于在字符串之间进行任何转换,但不能用于不是字符串的数据类型之间的转换。我知道我可以使用将任何内容转换为字符串,然后转换为所需的数据类型的方法,但是这种额外的转换似乎有些笨拙- 是否有更好的方法来做到这一点? 问题答案:

  • 问题内容: s是“ E”,但我想要的是“ 123” 请告诉我如何获得“ 123”。 在Java中,我可以这样进行: 如何在Go中输入两个字符串? 问题答案: 使用包的功能。 例如: 您可以简单地通过添加字符串或使用包的功能来连接字符串。