【问题标题】:storing byte array into a string variable in Go lang在 Go 语言中将字节数组存储到字符串变量中
【发布时间】:2021-11-09 06:37:59
【问题描述】:

我是第一次使用 Go Lang。 我有一个字节数组,我想通过套接字发送。 目前,我的套接字数据有字符串变量 msg1、msg2、msg3。 我想将我的字节数组附加到它。下面是代码sn-p。

var arr1 [4]byte = [4]byte{11,22,33,44}

addr := msg1 + msg2 + msg3
socket.Send(addr, 0)

但是当我尝试这样做时,我得到了一个错误。

addr := msg1 + msg2 + msg3 + string(arr1)

Error: cannot convert arr1 (type [4]byte) to type string

在这种情况下我该怎么办?

实际代码

package main
import "fmt"

var arr1 [4]byte = [4]byte{11,22,33,44}
func main() {
    data := "msg1" + string(arr1[:])
  fmt.Printf("\n%s",data)
}

【问题讨论】:

  • 请访问 Tour of Go tour.golang.org 学习语言的基础知识。

标签: arrays string sockets go


【解决方案1】:

字节数组不能转换为字符串,但字节切片可以:

addr := msg1 + msg2 + msg3 + string(arr1[:])

或者将arr1声明为字节片:

var arr1 = []byte{11,22,33,44}

【讨论】:

  • 但我试过了,它仍然显示垃圾数据。
  • 您的字节切片包含不可打印的字符。
  • 我刚刚添加了实际代码..你可以检查一下吗?
  • 11 和 22 是不可打印的字符。你想完成什么?
  • 例如:我将 IP 地址“11.22.33.44”存储在我的字节数组中,并尝试将其发送到套接字
【解决方案2】:

byte 不是string,请阅读https://en.wikipedia.org/wiki/ASCII

猜你想要这个:

// var arr1 [4]byte = [4]byte{11, 22, 33, 44}
var arr1 [4]string = [4]string{"11", "22", "33", "44"}

func main() {
    data := "msg1" + arr1[0] + arr1[1] + arr1[2] + arr1[3]
    fmt.Printf("\n%s", data)
}

【讨论】:

    【解决方案3】:

    使用append(),我给了你两种方法。我不知道你真正想要哪种方式。但我希望其中一种方法对您有所帮助。

    package main
    
    import "fmt"
    
    var arr [4]string = [4]string{"11", "22", "33", "44"}
    var messages [3]string = [3]string{"msg1", "msg2", "msg3"}
    
    func main() {
        // fmt.Println(arr[0:4])
    
        // One way
        appending1 := append(messages[0:1], arr[0])
        appending2 := append(messages[1:2], arr[1])
        appending3 := append(messages[2:], arr[2])
        fmt.Println(appending1)
        fmt.Println(appending2)
        fmt.Println(appending3)
    
        // Second way
        appending1 := append(messages[0:1], arr[0], arr[1], arr[2], arr[3])
        appending2 := append(messages[1:2], arr[0], arr[1], arr[2], arr[3])
        appending3 := append(messages[2:3], arr[0], arr[1], arr[2], arr[3])
        fmt.Println(appending1)
        fmt.Println(appending2)
        fmt.Println(appending3)
    }
    

    单向结果

    [11 msg1]
    [22 msg2]
    [33 msg3]
    

    第二路结果

    [msg1 11 22 33 44]
    [msg2 11 22 33 44]
    [msg3 11 22 33 44]
    

    【讨论】:

      【解决方案4】:
      package main
      
      import (
          "encoding/hex"
          "fmt"
      )
      
      var byteArray [4]byte = [4]byte{11, 22, 33, 44}
      
      func main() {
          msg1 := "HI"
          msg2 := "Hello"
          msg3 := "There"
      
          byteArrayToString := hex.EncodeToString(byteArray[:])
          fmt.Printf("\n%s", msg1+msg2+msg3+byteArrayToString)
      }
      

      【讨论】:

      • 您的回答将通过对所提供代码的解释提供更多信息。
      猜你喜欢
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多