如何在Go中将以null结尾的字节数组转换为字符串?
大家好!我刚开始学习Go,在处理C字符串时遇到了问题。我需要从外部源(例如通过cgo的syscall或C库)读取数据,这些数据返回以空字节(`\0`)结尾的字节数组。在Go中,字符串只是字节切片,但它们不必以null结尾,并且字符串中的空字节被视为普通字符。
我有这样的代码:
```go
package main
import "fmt"
func main() {
// 示例:从C函数获取的字节数组
data := []byte{'H', 'e', 'l', 'l', 'o', 0, 'W', 'o', 'r', 'l', 'd', 0}
// 简单转换为字符串
str := string(data)
fmt.Println(str) // 输出 "Hello" 和垃圾?还是 "Hello\0World"?
}
```
问题在于,如果我直接使用 `string(data)`,所有字节都会进入字符串,包括空字节以及第一个空字节之后的所有内容。而我只需要获取第一个空字节之前的部分(就像在C中一样——字符串以 `\0` 结尾)。