Obwohl nicht extrem performant, ist die einzige lesbare Lösung
//split by separator and pick the first one.
//This has all the characters till null excluding null itself.
retByteArray := bytes.Split(byteArray[:], []byte{0}) [0]
// OR
//If you want a true C-like string including the null character
retByteArray := bytes.SplitAfter(byteArray[:], []byte{0}) [0]
Vollständiges Beispiel für ein Byte-Array im C-Stil:
package main
import (
"bytes"
"fmt"
)
func main() {
var byteArray = [6]byte{97,98,0,100,0,99}
cStyleString := bytes.SplitAfter(byteArray[:], []byte{0}) [0]
fmt.Println(cStyleString)
}
Vollständiges Beispiel für eine Go-Zeichenfolge ohne Nullen:
package main
import (
"bytes"
"fmt"
)
func main() {
var byteArray = [6]byte{97,98,0,100,0,99}
goStyleString := string( bytes.Split(byteArray[:], []byte{0}) [0] )
fmt.Println(goStyleString)
}
Dadurch wird ein Stück Byte zugewiesen. Behalten Sie also die Leistung im Auge, wenn sie stark oder wiederholt verwendet wird.
^@
nicht angezeigt , aber es wäre da gewesen, wenn du es im Terminal oder ähnlichem getestet hättest. Der Grund dafür ist, dass Go die Konvertierung des Byte-Arrays in eine Zeichenfolge nicht beendet, wenn eine 0len(string(bytes))
in Ihrem Beispiel 5 und nicht 1 gefunden wird. Es hängt von der Ausgabefunktion ab, ob die Zeichenfolge vollständig (mit Nullen) gedruckt ist oder nicht.