小编典典

如何将字符串分配给字节数组

go

我想将字符串分配给字节数组:

var arr [20]byte
str := "abc"
for k, v := range []byte(str) {
  arr[k] = byte(v)
}

有别的方法吗?


阅读 273

收藏
2021-10-25

共2个答案

小编典典

安全简单:

[]byte("Here is a string....")
2021-10-25
小编典典

要将字符串转换为字节切片,请执行以下操作string -> []byte

[]byte(str)

要将数组转换为切片,请执行以下操作[20]byte -> []byte

arr[:]

要将字符串复制到数组,请执行以下操作string -> [20]byte

copy(arr[:], str)

与上面相同,但首先将字符串显式转换为切片:

copy(arr[:], []byte(str))

  • 内置copy功能只复制片,片。
  • 数组是“底层数据”,而切片是“底层数据的视口”。
  • 使用[:]使数组有资格作为切片。
  • 一个字符串,没有资格作为可以复制一个切片,但是它有资格作为可复制切片(string是不可改变的)。
  • 如果字符串太长,copy将只复制适合的字符串部分(然后多字节符文可能只复制部分,这将破坏结果字符串的最后一个符文)。

这段代码:

var arr [20]byte
copy(arr[:], "abc")
fmt.Printf("array: %v (%T)\n", arr, arr)

…给出以下输出:

array: [97 98 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ([20]uint8)
2021-10-25