¿Cómo puedo convertir una matriz de bytes terminada en cero en una cadena?
Necesito leer [100]byte
para transferir una gran cantidad de string
datos.
Debido a que no todos los string
s tienen exactamente 100 caracteres, la parte restante byte array
se rellena con 0
s.
Si convierto [100]byte
a string
by: string(byteArray[:])
, los tailings 0
se muestran como ^@^@
s.
En C, string
terminará en 0
, entonces, ¿cuál es la mejor manera de convertir esto byte array
en string
Go?
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 n
es 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 bytes
paquete 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)
Usar:
s := string(byteArray[:])
Solución simplista:
str := fmt.Sprintf("%s", byteArray)
Sin embargo, no estoy seguro de qué tan eficaz es esto.