猿问

如何将字节缓冲区中以零结尾的字符串转换为Go中的字符串?

这:


label := string([]byte{97, 98, 99, 0, 0, 0, 0})

fmt.Printf("%s\n", label)

这样做(^@是空字节):


go run test.go 

abc^@^@^@


斯蒂芬大帝
浏览 165回答 3
3回答

呼如林

Go的syscall程序包中隐藏了此函数,该函数查找第一个空字节([] byte {0})并返回长度。我假设它被称为C-Length的clen。抱歉,我迟到了一年,但是我认为它比其他两个要简单得多(没有不必要的输入等)。func clen(n []byte) int {&nbsp; &nbsp; for i := 0; i < len(n); i++ {&nbsp; &nbsp; &nbsp; &nbsp; if n[i] == 0 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return i&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return len(n)}所以,label := []byte{97, 98, 99, 0, 0, 0, 0}s := label[:clen(label)]fmt.Println(string(s))^的意思是设置s为label从头到索引处的字节片clen(label)。结果将为abc3。
随时随地看视频慕课网APP

相关分类

Go
我要回答