545 votes

Comment assigner une chaîne de caractères à un tableau d'octets

Je veux assigner une chaîne de caractères à un tableau d'octets :

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

Vous avez une autre méthode ?

763voto

openwonk Points 7520

Sûr et simple :

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

261voto

Alexander Points 1851

Pour convertir une chaîne de caractères en une tranche d'octets, string -> []byte :

[]byte(str)

Pour convertir un tableau en une tranche, [20]byte -> []byte :

arr[:]

Pour copier une chaîne de caractères dans un tableau, string -> [20]byte :

copy(arr[:], str)

Comme ci-dessus, mais en convertissant d'abord explicitement la chaîne en une tranche :

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

  • Le système intégré copy ne fait que copier à une tranche, de une tranche.
  • Les tableaux sont "les données sous-jacentes", tandis que les tranches sont "une fenêtre sur les données sous-jacentes".
  • Utilisation de [:] permet de qualifier un tableau de tranche.
  • Une chaîne de caractères ne peut pas être considérée comme une tranche pouvant être copiée. à mais il s'agit d'une tranche qui peut être copiée. de (les chaînes de caractères sont immuables).
  • Si la chaîne est trop longue, copy ne copiera que la partie de la chaîne qui convient (et les runes multi-octets peuvent alors n'être copiées que partiellement, ce qui corrompra la dernière rune de la chaîne résultante).

Ce code :

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

...donne le résultat suivant :

array: [97 98 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ([20]uint8)

Je l'ai également rendu disponible à la Go Playground

124voto

peterSO Points 25725

Par exemple,

package main

import "fmt"

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

Sortie :

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]

45voto

Sameh Sharaf Points 712

C'est du gâteau :

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

31voto

chespinoza Points 2552

Je pense que c'est mieux..

package main

import "fmt"

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

Vérifiez ici : http://play.golang.org/p/vpnAWHZZk7

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X