如何将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] 
注意我想要在左边填充,而不是在右边。