I want to assign string to bytes array:
var arr [20]byte
str := \"abc\"
for k, v := range []byte(str) {
arr[k] = byte(v)
}
Have another m
For converting from a string to a byte slice, string -> []byte
:
[]byte(str)
For converting an array to a slice, [20]byte -> []byte
:
arr[:]
For copying a string to an array, string -> [20]byte
:
copy(arr[:], str)
Same as above, but explicitly converting the string to a slice first:
copy(arr[:], []byte(str))
copy
function only copies to a slice, from a slice.[:]
makes an array qualify as a slice.copy
will only copy the part of the string that fits.This code:
var arr [20]byte
copy(arr[:], "abc")
fmt.Printf("array: %v (%T)\n", arr, arr)
...gives the following output:
array: [97 98 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ([20]uint8)
I also made it available at the Go Playground
Piece of cake:
arr := []byte("That's all folks!!")
Ended up creating array specific methods to do this. Much like the encoding/binary package with specific methods for each int type. For example 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)
Output:
[0 0 0 0 0 0 0 0 0 0 0 0 0 97 98 99]
Notice how I wanted padding on the left, not the right.
http://play.golang.org/p/7tNumnJaiN