Cómo asignar una cadena a una matriz de bytes

Resuelto sofire asked hace 12 años • 0 respuestas

Quiero asignar una cadena a una matriz de bytes:

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

¿Tienes otro método?

sofire avatar Nov 07 '11 09:11 sofire
Aceptado

Seguro y sencillo:

[]byte("Here is a string....")
openwonk avatar Feb 01 '2015 08:02 openwonk

Para convertir de una cadena a un segmento de bytes string -> []byte,:

[]byte(str)

Para convertir una matriz en un segmento [20]byte -> []byte,:

arr[:]

Para copiar una cadena a una matriz string -> [20]byte,:

copy(arr[:], str)

Lo mismo que arriba, pero primero convierte explícitamente la cadena en un segmento:

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

  • La función incorporada copysolo copia a un sector, desde un sector.
  • Las matrices son "los datos subyacentes", mientras que los sectores son "una ventana gráfica de los datos subyacentes".
  • El uso [:]hace que una matriz califique como una porción.
  • Una cadena no califica como un segmento en el que se puede copiar , pero sí se considera un segmento del que se puede copiar (las cadenas son inmutables).
  • Si la cadena es demasiado larga, copysolo se copiará la parte de la cadena que encaje (y las runas multibyte se pueden copiar solo parcialmente, lo que corromperá la última runa de la cadena resultante).

Este código:

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

...da el siguiente resultado:

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

También lo puse a disposición en Go Playground.

Alexander avatar Sep 02 '2016 14:09 Alexander

Por ejemplo,

package main

import "fmt"

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

Producción:

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]
peterSO avatar Nov 07 '2011 03:11 peterSO

Pedazo de pastel:

arr := []byte("That's all folks!!")
Sameh Sharaf avatar Jan 26 '2016 10:01 Sameh Sharaf