文字列をbytes配列に代入したいです。
var arr [20]byte
str := "abc"
for k, v := range []byte(str) {
arr[k] = byte(v)
}
別の方法がありますか?
安全で簡単:
[]byte("Here is a string....")
文字列からバイトスライスに変換する場合、string -> []byte
:
[]byte(str)
配列をスライスに変換するには、[20]byte -> []byte
:
arr[:]
文字列を配列にコピーするには、string -> [20]byte
:
copy(arr[:], str)
上記と同じですが、最初に文字列をスライスに明示的に変換します。
copy(arr[:], []byte(str))
copy
関数は を aスライスに、 を aスライスにコピーするだけです。[:]
を使用すると、配列はスライスとして修飾されます。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)
Go Playground でも利用可能にしました
例えば、
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!!")
もっといいと思います。
package main
import "fmt"
func main() {
str := "abc"
mySlice := []byte(str)
fmt.Printf("%v -> '%s'",mySlice,mySlice )
}
ここでチェックしてください: http://play.golang.org/p/vpnAWHZZk7
あなたは[]文字列を[] byte型に変換する速い方法が必要です。テキストデータをランダムアクセスファイルに保存する場合や、入力データを[]バイト型にする必要があるその他の種類のデータ操作などの状況で使用する。
package main
func main() {
var s string
//...
b := []byte(s)
//...
}
dataパラメータとしてバイトスライスを受け入れるioutil.WriteFileを使用するときに便利です。
WriteFile func(filename string, data []byte, perm os.FileMode) error
もう一つの例
package main
import (
"fmt"
"strings"
)
func main() {
stringSlice := []string{"hello", "world"}
stringByte := strings.Join(stringSlice, " ")
// Byte array value
fmt.Println([]byte(stringByte))
// Corresponding string value
fmt.Println(string([]byte(stringByte)))
}
出力:
[104 101 108 108 111 111 119 119 114 108 100]こんにちは世界
リンクをチェックしてください 遊び場
これを行うために配列固有のメソッドを作成することになりました。 encoding/binary パッケージと同様に、各intタイプに特定のメソッドがあります。たとえば、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]
右側ではなく左側にパディングが必要なことに注意してください。