¿Cómo puedo convertir una matriz de bytes terminada en cero en una cadena?

Resuelto Derrick Zhang asked hace 11 años • 11 respuestas

Necesito leer [100]bytepara transferir una gran cantidad de stringdatos.

Debido a que no todos los strings tienen exactamente 100 caracteres, la parte restante byte arrayse rellena con 0s.

Si convierto [100]bytea stringby: string(byteArray[:]), los tailings 0se muestran como ^@^@s.

En C, stringterminará en 0, entonces, ¿cuál es la mejor manera de convertir esto byte arrayen stringGo?

Derrick Zhang avatar Jan 09 '13 14:01 Derrick Zhang
Aceptado

Los métodos que leen datos en segmentos de bytes devuelven el número de bytes leídos. Debes guardar ese número y luego usarlo para crear tu cadena. Si nes la cantidad de bytes leídos, su código se vería así:

s := string(byteArray[:n])

Para convertir la cadena completa, se puede utilizar esto:

s := string(byteArray[:len(byteArray)])

Esto equivale a:

s := string(byteArray[:])

Si por alguna razón no lo sabe n, puede usar el bytespaquete para encontrarlo, suponiendo que su entrada no tenga un carácter nulo incrustado.

n := bytes.Index(byteArray[:], []byte{0})

O como señaló icza, puedes usar el siguiente código:

n := bytes.IndexByte(byteArray[:], 0)
Daniel avatar Jan 09 '2013 07:01 Daniel

Usar:

s := string(byteArray[:])
mattes avatar Sep 04 '2013 13:09 mattes

Solución simplista:

str := fmt.Sprintf("%s", byteArray)

Sin embargo, no estoy seguro de qué tan eficaz es esto.

marcusljx avatar Nov 02 '2016 08:11 marcusljx