一尘不染

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

go

这个:

label := string([]byte{97, 98, 99, 0, 0, 0, 0})
fmt.Printf("%s\n", label)

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

go run test.go 
abc^@^@^@

阅读 228

收藏
2020-07-02

共1个答案

一尘不染

Go的syscall程序包中隐藏了该函数,该函数查找第一个空字节([] byte {0})并返回长度。我假设它被称为C-Length。

抱歉,我迟到了一年,但是我认为它比其他两个 简单得多(没有不必要的输入等)。

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))

^的意思是设置slabel从头到索引处的字节片clen(label)

结果将为abc3。

2020-07-02