【问题标题】:Putting int8 into byte array将 int8 放入字节数组
【发布时间】:2016-10-26 21:35:13
【问题描述】:

我有以下字节数组:

buf := make([]byte, 1)
var value int8
value = 45
buf[0] = value // cannot use type int8 as type []byte in assignment

当我想将一个 char 值放入字节数组时,我得到了 cannot use type int8 as type []byte in assignment 的错误。怎么了?我该怎么做?

【问题讨论】:

标签: go


【解决方案1】:

试试这个:

buf := make([]byte, 1)
var value int8
value = 45
buf[0] = byte(value)

更新:取出将负数转换为正数的代码。看来byte(...) 已经在当前版本的 Go 中进行了这种转换。

【讨论】:

  • 不需要这种“棘手”的转换,一个简单的byte(value) 给出相同的结果。
  • 看来你是对的!我想知道这里是否发生了一些变化……我发现了一个较旧的资源,该资源表示需要先转换为正数。
  • 没有变化。旧的来源不正确,或者可能与另一种语言有关?或者可能包括常量表达式...
  • @icza 令人惊讶的是,我认为我的来源是你! :-) stackoverflow.com/questions/28848187/…
【解决方案2】:

您遇到的问题是,尽管int8byte 大致相同,但它们不是同一类型。 Go 在这方面比 PHP 更严格一些(PHP 并不严格)。您可以通过将值显式转换为 byte 来解决此问题:

buf := make([]byte, 1)
var value int8
value = 45
buf[0] = byte(value) // cast int8 to byte

【讨论】:

  • 值得注意的是,byte 只是 Go 中 uint8 的别名。这意味着主要区别在于您尝试将有符号值存储到无符号槽中。类型转换为 uint8,或首先使用 uint8,无需 byte 类型转换即可解决此问题。示例:play.golang.org/p/XzQ7eWOS16
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 2018-12-11
  • 2016-04-07
  • 2012-10-18
  • 2018-03-02
  • 1970-01-01
相关资源
最近更新 更多