为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
斯蒂芬大帝 2021-05-10 13:50:19
这:label := string([]byte{97, 98, 99, 0, 0, 0, 0})fmt.Printf("%s\n", label)这样做(^@是空字节):go run test.go abc^@^@^@
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

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


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


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


结果将为abc3。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信