如何将string分配给字节数组

我想将string分配给字节数组:

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

有另一种方法?

安全和简单:

 []byte("Here is a string....") 

例如,

 package main import "fmt" func main() { s := "abc" var a [20]byte copy(a[:], s) fmt.Println("s:", []byte(s), "a:", a) } 

输出:

 s: [97 98 99] a: [97 98 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 

小菜一碟:

 arr := []byte("That's all folks!!") 

对于从string转换为字节片段, string -> []byte

 []byte(str) 

为了将数组转换成片, [20]byte -> []byte

 arr[:] 

要将string复制到数组, string -> [20]byte

 copy(arr[:], str) 

与上面相同,但是首先显式地将string转换为片:

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

  • 内置的copyfunction只能从一个切片复制到一个切片。
  • 数组是“底层数据”,而数据片是“底层数据的视口”。
  • 使用[:]可以使数组成为切片。
  • 一个string被限定为一个片段。
  • 如果string太长, copy将只复制适合的string部分。

此代码:

 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) 

我也在Go游乐场提供

我认为这样更好..

 package main import "fmt" func main() { str := "abc" mySlice := []byte(str) fmt.Printf("%v -> '%s'",mySlice,mySlice ) } 

在这里检查: http : //play.golang.org/p/vpnAWHZZk7

除了上面提到的方法之外,你也可以做一个把戏

 s := "hello" b := *(*[]byte)(unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(&s)))) 

去玩: http : //play.golang.org/p/xASsiSpQmC

你不应该使用这个:-)

结束创build数组特定的方法来做到这一点。 就像每个inttypes的具有特定方法的编码/二进制包一样。 例如binary.BigEndian.PutUint16([]byte, uint16)

 func byte16PutString(s string) [16]byte { var a [16]byte if len(s) > 16 { copy(a[:], s) } else { copy(a[16-len(s):], s) } return a } var b [16]byte b = byte16PutString("abc") fmt.Printf("%v\n", b) 

输出:

 [0 0 0 0 0 0 0 0 0 0 0 0 0 97 98 99] 

注意我想要在左边填充,而不是在右边。

http://play.golang.org/p/7tNumnJaiN