这:
label := string([]byte{97, 98, 99, 0, 0, 0, 0})
fmt.Printf("%sn", label)
这样做(^@
是空字节):
go run test.go
abc^@^@^@
Go的syscall包中隐藏了这个函数,它可以找到第一个空字节([]字节{0})并返回长度。我假设它被称为C长度的紧咬。
对不起,我的回答晚了一年,但我认为这比其他两个简单很多(没有不必要的进口等)
func clen(n []byte) int {
for i := 0; i < len(n); i++ {
if n[i] == 0 {
return i
}
}
return len(n)
}
所以,
label := []byte{97, 98, 99, 0, 0, 0, 0}
s := label[:clen(label)]
fmt.Println(string(s))
这意味着将s
设置为label
中从clen(label)
的开始到索引的字节片。
结果将是长度为3的CCD_ 5。
注意,第一个答案只适用于在null终止符之后只有一个零的字符串;然而,一个正确的C风格的以null结尾的字符串在第一个