convert array go type-conversion

go - array - Convierte un entero a una matriz de bytes



hex string to byte c# (4)

¿Qué hay de malo en convertirlo en una cadena?

[]byte(fmt.Sprintf("%d", myint))

Tengo una función que recibe un []byte pero lo que tengo es un int , ¿cuál es la mejor manera de realizar esta conversión?

err = a.Write([]byte(myInt))

Creo que podría recorrer el largo camino y ponerlo en una cadena y ponerlo en bytes, pero suena feo y creo que hay mejores formas de hacerlo.


Consulte el paquete "codificación / binario". Particularmente las funciones de lectura y escritura:

binary.Write(a, binary.LittleEndian, myInt)


Estoy de acuerdo con el enfoque de Brainstorm: suponiendo que está pasando una representación binaria amigable para la máquina, use la biblioteca de encoding/binary . El OP sugiere que binary.Write() podría tener algunos gastos generales. Al observar la fuente para la implementación de Write() , veo que toma algunas decisiones de tiempo de ejecución para una flexibilidad máxima.

189 func Write(w io.Writer, order ByteOrder, data interface{}) error { 190 // Fast path for basic types. 191 var b [8]byte 192 var bs []byte 193 switch v := data.(type) { 194 case *int8: 195 bs = b[:1] 196 b[0] = byte(*v) 197 case int8: 198 bs = b[:1] 199 b[0] = byte(v) 200 case *uint8: 201 bs = b[:1] 202 b[0] = *v ...

¿Derecha? Write () toma un tercer argumento de data muy genérico, y eso impone cierta sobrecarga ya que el tiempo de ejecución de Go se fuerza a la información del tipo de codificación. Dado que Write() está haciendo algunas decisiones de tiempo de ejecución aquí que simplemente no necesita en su situación, tal vez puede llamar directamente a las funciones de codificación y ver si funciona mejor.

Algo como esto:

package main import ( "encoding/binary" "fmt" ) func main() { bs := make([]byte, 4) binary.LittleEndian.PutUint32(bs, 31415926) fmt.Println(bs) }

Háganos saber cómo funciona esto.

De lo contrario, si solo intenta obtener una representación ASCII del entero, puede obtener la representación de cadena (probablemente con strconv.Itoa ) y convertir esa cadena al tipo de []byte .

package main import ( "fmt" "strconv" ) func main() { bs := []byte(strconv.Itoa(31415926)) fmt.Println(bs) }


Lo siento, esto podría ser un poco tarde. Pero creo que encontré una mejor implementación en los documentos go.

buf := new(bytes.Buffer) var num uint16 = 1234 err := binary.Write(buf, binary.LittleEndian, num) if err != nil { fmt.Println("binary.Write failed:", err) } fmt.Printf("% x", buf.Bytes())