将byte数组转换为string的一个问题
1. 运行环境
go 1.193 windows/amd64
2. 问题描述?
我尝试使用一个byte数组去获取一个net.Conn结构体的数据 使用的是Read方法 但是在将byte数组转换为string时我发现依旧会将byte数组的nil也加入到string这样我去调用一个time.LoadLocation一个方法将字符串传入会不能正确识别我的字符串 因为会将数组中的nil也加入所以下面的一个比较是会是false当我尝试使用一个索引去删除尾随nil发现可以 有没有什么方法可以在转换string时自动忽略掉没有使用到的byte数组中的nil呢
package main
func main() {
var buf [512]byte
some.Read(buf[:])//write "local" to buf
str := string(buf[:])//localnullnulnullnull...
//want to get "local"
fmt.println(buf=="local")//false
index := bytes.IndexByte(buf[:],byte(0))//find the index of first nil byte
}
在程序中我比较了byte(0)和刚完成初始化缓冲区的第一个字符 我认为byte数组的初始化就是将它的uint8数组全部初始化也就是每个元素置为0就会和byte(0)得到一样的结果
3. 您期望得到的结果?
string(buf[:])=="local"//true
你这是强制转换了整个切片的内容啊,我记得类似读取的这种操作,函数会返回给你总共读取的字节数是多少,然后使用 string(buf[:返回的字节数]) 应该就可以了吧