将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数组转换为string的一个问题

在程序中我比较了byte(0)和刚完成初始化缓冲区的第一个字符 我认为byte数组的初始化就是将它的uint8数组全部初始化也就是每个元素置为0就会和byte(0)得到一样的结果

3. 您期望得到的结果?

string(buf[:])=="local"//true

4. 您实际得到的结果?

最佳答案

你这是强制转换了整个切片的内容啊,我记得类似读取的这种操作,函数会返回给你总共读取的字节数是多少,然后使用 string(buf[:返回的字节数]) 应该就可以了吧

2年前 评论
root_wang (楼主) 2年前
讨论数量: 4

byte(0)不是nil,如果是python的话,这是一个分割符,需要自己处理的。可以认为这是传输数据协议的一部分

2年前 评论
root_wang (楼主) 2年前

你这是强制转换了整个切片的内容啊,我记得类似读取的这种操作,函数会返回给你总共读取的字节数是多少,然后使用 string(buf[:返回的字节数]) 应该就可以了吧

2年前 评论
root_wang (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!